大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。

但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证。

下面来看看一看这个认证的工作过程:

第一步:客户端发送http request 给服务器,服务器验证该用户是否已经登录验证过了,如果没有的话,

服务器会返回一个401 Unauthozied给客户端,并且在Response 的 header "WWW-Authenticate" 中添加信息。

如下图。

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

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

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Decoder;public classHTTPAuthServlet extends HttpServlet {public voiddoGet(HttpServletRequest request, HttpServletResponse response) throws IOException {if (!BasicAuthenticationUtil.checkUserAuth(request, "basicAuth")) {if (!BasicAuthenticationUtil.checkHeaderAuth(request, "basicAuth")) {

response.setStatus(401);

response.setHeader("Cache-Control", "no-store");

response.setDateHeader("Expires", 0);

response.setHeader("WWW-authenticate", "Basic Realm=\"test\"");return null;

}

}//验证通过后

String client = request.getParameter("client");if(StringUtils.isBlank(client)) {

//......}//其他操作....

}public voiddoPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

doGet(request, response);

}

}

BasicAuthenticationUtil 帮助类

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import org.jfree.util.Log;

import sun.misc.*;/**

* basic Auth 认证方式

*

* @author Geely

**/

public classBasicAuthenticationUtil {/**

*

* @param request

* @param response

* @param sessionName

* @return*/

public staticboolean checkHeaderAuth(HttpServletRequest request, String sessionName) {

String authorization= request.getHeader("Authorization");if ((authorization != null) && (authorization.length() > 6)) {

authorization= authorization.substring(6, authorization.length());

String decodedAuth=base64Decode(authorization);if(StringUtil.isNotBlank(sessionName)) {

request.getSession().setAttribute(sessionName, decodedAuth);

}return true;

}return false;

}/**

*

* @param request

* @param response

* @param sessionName

* @return*/

public staticboolean checkUserAuth(HttpServletRequest request, String sessionName) {

String sessionAuth= null;if(StringUtil.isNotBlank(sessionName)) {

sessionAuth=(String) request.getSession().getAttribute(sessionName);

}if (sessionAuth != null) {

Log.info("this is next step");return true;

}return false;

}/**

* 编码

*

* @param bstr

* @return String*/@SuppressWarnings("restriction")public static String base64Encode(byte[] bstr) {

String strEncode= newBASE64Encoder().encode(bstr);returnstrEncode;

}/**

* 解码

*

* @param str

* @return*/@SuppressWarnings("restriction")public staticString base64Decode(String str) {if(StringUtil.isBlank(str)) {return null;

}

String s= null;try{

BASE64Decoder decoder= newBASE64Decoder();byte[] b =decoder.decodeBuffer(str);

s= new String(b, "UTF8");

}catch(UnsupportedEncodingException e) {//TODO Auto-generated catch block

s = null;

}catch(IOException e) {//TODO Auto-generated catch block

s = null;

}returns;

}

}

当request第一次到达服务器时,服务器没有认证的信息,服务器会返回一个401 Unauthozied给客户端。

认证之后将认证信息放在session,以后在session有效期内就不用再认证了。

以上就是HTTP基本认证(Basic Authentication)的JAVA实例代码全部内容

authentication java_HTTP基本认证(Basic Authentication)的JAVA实例代码相关推荐

  1. HTTP基础认证Basic Authentication

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

  2. [转]OData and Authentication – Part 6 – Custom Basic Authentication

    本文转自:https://blogs.msdn.microsoft.com/astoriateam/2010/07/21/odata-and-authentication-part-6-custom- ...

  3. HTTP基本认证(Basic Authentication)的JAVA示例

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

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

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

  5. java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...

    某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见.为达到这个目标,必不可少的就是认证功能. 一.认证 核对登录者本人才知道的信息: 密码.动态令牌.数字证书.生物认证.IC卡等 HTTP 使用 ...

  6. 23种 设计模式 java 实例代码

    23种设计模式 文章目录 *23种设计模式* 一.设计模式的6/7 大原则: 1).UML类图定义 2).UML类图详解 1. 名称详解 **依赖(Dependency)** **泛化(General ...

  7. HTTP Basic Authentication验证WCF Data Service

    WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication for RESTFul Service ...

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

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

  9. Messagepack Java实例

    接前文,上个博客笔者详解了Messagepack的基础原理,详见链接:http://www.cnblogs.com/cnxieyang/p/8323698.html 本文将介绍Messagepack- ...

最新文章

  1. Ztree节点增加删除修改和Icheck的用法
  2. C#中使用WCF一些常见问题及解决方案
  3. docker删除es数据_Docker的常用命令
  4. 【面试必备】java实现下载文件
  5. Sql Server 2005 存储过程分页
  6. python初学工资-python工资高还是java?
  7. linux 协议栈 位置,[置顶] Linux协议栈代码阅读笔记(一)
  8. macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新
  9. java 查看垃圾收集器_JVM系列:查看JVM使用的什么垃圾收集器
  10. Android图片特效处理之图片叠加
  11. 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理
  12. URL 和 URI 区别
  13. UML基础(八)--构件图
  14. word自动生成目录,设置从指定页码开始
  15. 用python解决放苹果问题_放苹果问题(组合数学经典)
  16. Thinkpad部分机型支持的智能感知功能介绍
  17. poj3104(二分判断可行性)
  18. 大学英语六级考试大纲 A
  19. 張潮《幽夢影》:「讀史宜夏」
  20. 外国人最习惯用的社交软件有哪些?

热门文章

  1. C语言和我的世界指令哪个难,我的世界难度有什么区别 难度选择指令介绍
  2. C/C++小游戏 ——贪吃蛇
  3. 循环队列的进队算法c语言,循环队列的定义,入队算法,出队算法,遍历算法,及其代码实现-Go语言中文社区...
  4. ssh免密登录配置方法及配置
  5. java mvc 导出excel_Java springMVC POI 导出 EXCEL
  6. python建模仿真 matlab_清华大学出版社-图书详情-《仿真建模与MATLAB实用教程》
  7. linuxpython升级3.5_linux升级python3.5到3.6
  8. c语言判断整数_用c++编写闰年的判断基础程序
  9. python决策树的应用_机器学习-决策树实战应用
  10. 利用人工智能提升团队包容性