大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。
但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证。

下面来看看一看这个认证的工作过程:
第一步:  客户端发送http request 给服务器,服务器验证该用户是否已经登录验证过了,如果没有的话,
服务器会返回一个401 Unauthozied给客户端,并且在Response 的 header "WWW-Authenticate" 中添加信息。
如下图。

第二步:浏览器在接受到401 Unauthozied后,会弹出登录验证的对话框。用户输入用户名和密码后,
浏览器用BASE64编码后,放在Authorization header中发送给服务器。如下图:

第三步: 服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端。

下面来看一个JAVA的示例代码:

 1 import java.io.IOException;
 2 import java.io.PrintWriter;
 3 import javax.servlet.http.HttpServlet;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpServletResponse;
 6 import sun.misc.BASE64Decoder;
 7
 8 public class HTTPAuthServlet extends HttpServlet {
 9
10     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
11         String sessionAuth = (String) request.getSession().getAttribute("auth");
12
13         if (sessionAuth != null) {
14             System.out.println("this is next step");
15             nextStep(request, response);
16
17         } else {
18
19             if(!checkHeaderAuth(request, response)){
20                 response.setStatus(401);
21                 response.setHeader("Cache-Control", "no-store");
22                 response.setDateHeader("Expires", 0);
23                 response.setHeader("WWW-authenticate", "Basic Realm=\"test\"");
24             }
25
26         }
27
28     }
29
30     private boolean checkHeaderAuth(HttpServletRequest request, HttpServletResponse response) throws IOException {
31
32         String auth = request.getHeader("Authorization");
33         System.out.println("auth encoded in base64 is " + getFromBASE64(auth));
34
35         if ((auth != null) && (auth.length() > 6)) {
36             auth = auth.substring(6, auth.length());
37
38             String decodedAuth = getFromBASE64(auth);
39             System.out.println("auth decoded from base64 is " + decodedAuth);
40
41             request.getSession().setAttribute("auth", decodedAuth);
42             return true;
43         }else{
44             return false;
45         }
46
47     }
48
49     private String getFromBASE64(String s) {
50         if (s == null)
51             return null;
52         BASE64Decoder decoder = new BASE64Decoder();
53         try {
54             byte[] b = decoder.decodeBuffer(s);
55             return new String(b);
56         } catch (Exception e) {
57             return null;
58         }
59     }
60
61     public void nextStep(HttpServletRequest request, HttpServletResponse response) throws IOException {
62         PrintWriter pw = response.getWriter();
63         pw.println("<html> next step, authentication is : " + request.getSession().getAttribute("auth") + "<br>");
64         pw.println("<br></html>");
65     }
66
67     public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
68         doGet(request, response);
69     }
70
71 }

当request第一次到达服务器时,服务器没有认证的信息,服务器会返回一个401 Unauthozied给客户端。
认证之后将认证信息放在session,以后在session有效期内就不用再认证了。

转载于:https://www.cnblogs.com/azhqiang/p/5944697.html

HTTP基本认证(Basic Authentication)的JAVA示例相关推荐

  1. authentication java_HTTP基本认证(Basic Authentication)的JAVA实例代码

    大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证. 下面来看看一看这个认证的工作过程: 第一步:客户端发送h ...

  2. HTTP基础认证Basic Authentication

    HTTP基础认证Basic Authentication Basic Authentication是一种HTTP访问控制方式,用于限制对网站资源的访问.这种方式不需要Cookie和Session,只需 ...

  3. Python实现http基本认证(BASIC AUTHENTICATION)

    1.安装requests库 pip3 install requests 2.代码示例 通过auth字段来设置认证信息 auth=("username", "passwor ...

  4. kong插件应用(熔断 限流,黑白名单,认证(basic,key,jwt,hmac,),授权,加密,zipkin链路跟踪,日志, prometheus可视化, 爬虫控制插件)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kong安装部署以及kong-dashboard参考:https://blog.csdn.net/luanpeng825485697/article/ ...

  5. HTTP Basic Authentication

    Client端发送请求, 要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法: 1. 在请求头中添加Authorization:     Author ...

  6. 访问需要HTTP Basic Authentication认证的资源的各种语言的实现

    原文地址为: 访问需要HTTP Basic Authentication认证的资源的各种语言的实现 无聊想调用下嘀咕的api的时候,发现需要HTTP Basic Authentication,就看了下 ...

  7. Web services 安全实践: 基于 HTTP Basic Authentication 为 Web services 配置传输层安全机制...

    转载:http://www.ibm.com/developerworks/cn/webservices/1106_webservicessecurity/ 简介 正如"HTTP Basic ...

  8. [转]asp.net权限认证:摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...

  9. java 示例_最佳Java示例

    java 示例 什么是Java? (What is Java?) Java is a programming language developed by Sun Microsystems in 199 ...

最新文章

  1. 开发日记-20190612 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  2. ROS安装:Ubuntu18.04安装配置ROS-melodic
  3. PHP 函数调用次数,php获取页面执行时间,数据库读写次数,函数调用次数等(THINKphp)的简单示例...
  4. 硬盘的转速是什么意思,有什么功能?
  5. 在谈PHP中的 抽象类(abstract class)和 接口(interface)
  6. 如何强制 .NET 程序以 管理员模式 运行 ?
  7. LeetCode 642. 设计搜索自动补全系统(Trie树)
  8. python Web抓取(一)[没写完]
  9. 海龟绘图两小时上手C语言 - 4 任意螺旋线
  10. 数学分析原理 定理 6.12
  11. 查看kms服务器信息,查看kms服务器地址
  12. 2015年最新中国知网CNKI免费账号直接入口
  13. 利用 Python 优雅地将 PDF 转换成图片
  14. java实现清除图片水印_Java 添加、删除PPT文本和图片水印
  15. 海康威视多监控集成到同一页面
  16. 商城尺码选择效果 jquery
  17. 给网页质量进行瘦身的办法-金瑞帆建站
  18. 用Liveupdata 刷MSI主板Slic 2.1
  19. Unity3d--GUI自适应矩阵(通过Matrix4x4.SetTRS)
  20. 正方教务管理系统后台敏感日志查看漏洞

热门文章

  1. mysql 平均值 排序_MySQL按平均两个平均值排序
  2. linux服务器上svn的log_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器 | Linux 中国...
  3. Eclipse中的集成Git插件删除线上远程分支
  4. 简单shell:删除五日之前的日志文件
  5. 【C++基础】异常处理机制概要
  6. r语言 分类变量 虚拟变量_R语言中的变量
  7. Java Thread类的静态布尔型interrupted()方法(带示例)
  8. 方法之输出星型及其调用
  9. HDU 5842—— Lweb and String CCPC 网络赛 1011
  10. CodeForces 501B——Misha and Changing Handles