HTTP基本认证(Basic Authentication)的JAVA示例
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。
但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用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示例相关推荐
- authentication java_HTTP基本认证(Basic Authentication)的JAVA实例代码
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证. 下面来看看一看这个认证的工作过程: 第一步:客户端发送h ...
- HTTP基础认证Basic Authentication
HTTP基础认证Basic Authentication Basic Authentication是一种HTTP访问控制方式,用于限制对网站资源的访问.这种方式不需要Cookie和Session,只需 ...
- Python实现http基本认证(BASIC AUTHENTICATION)
1.安装requests库 pip3 install requests 2.代码示例 通过auth字段来设置认证信息 auth=("username", "passwor ...
- kong插件应用(熔断 限流,黑白名单,认证(basic,key,jwt,hmac,),授权,加密,zipkin链路跟踪,日志, prometheus可视化, 爬虫控制插件)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kong安装部署以及kong-dashboard参考:https://blog.csdn.net/luanpeng825485697/article/ ...
- HTTP Basic Authentication
Client端发送请求, 要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法: 1. 在请求头中添加Authorization: Author ...
- 访问需要HTTP Basic Authentication认证的资源的各种语言的实现
原文地址为: 访问需要HTTP Basic Authentication认证的资源的各种语言的实现 无聊想调用下嘀咕的api的时候,发现需要HTTP Basic Authentication,就看了下 ...
- Web services 安全实践: 基于 HTTP Basic Authentication 为 Web services 配置传输层安全机制...
转载:http://www.ibm.com/developerworks/cn/webservices/1106_webservicessecurity/ 简介 正如"HTTP Basic ...
- [转]asp.net权限认证:摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...
- java 示例_最佳Java示例
java 示例 什么是Java? (What is Java?) Java is a programming language developed by Sun Microsystems in 199 ...
最新文章
- 开发日记-20190612 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- ROS安装:Ubuntu18.04安装配置ROS-melodic
- PHP 函数调用次数,php获取页面执行时间,数据库读写次数,函数调用次数等(THINKphp)的简单示例...
- 硬盘的转速是什么意思,有什么功能?
- 在谈PHP中的 抽象类(abstract class)和 接口(interface)
- 如何强制 .NET 程序以 管理员模式 运行 ?
- LeetCode 642. 设计搜索自动补全系统(Trie树)
- python Web抓取(一)[没写完]
- 海龟绘图两小时上手C语言 - 4 任意螺旋线
- 数学分析原理 定理 6.12
- 查看kms服务器信息,查看kms服务器地址
- 2015年最新中国知网CNKI免费账号直接入口
- 利用 Python 优雅地将 PDF 转换成图片
- java实现清除图片水印_Java 添加、删除PPT文本和图片水印
- 海康威视多监控集成到同一页面
- 商城尺码选择效果 jquery
- 给网页质量进行瘦身的办法-金瑞帆建站
- 用Liveupdata 刷MSI主板Slic 2.1
- Unity3d--GUI自适应矩阵(通过Matrix4x4.SetTRS)
- 正方教务管理系统后台敏感日志查看漏洞
热门文章
- mysql 平均值 排序_MySQL按平均两个平均值排序
- linux服务器上svn的log_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器 | Linux 中国...
- Eclipse中的集成Git插件删除线上远程分支
- 简单shell:删除五日之前的日志文件
- 【C++基础】异常处理机制概要
- r语言 分类变量 虚拟变量_R语言中的变量
- Java Thread类的静态布尔型interrupted()方法(带示例)
- 方法之输出星型及其调用
- HDU 5842——	 Lweb and String CCPC 网络赛 1011
- CodeForces 501B——Misha and Changing Handles