HTTP基本认证(Basic Authentication)的JAVA实例代码
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。
但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用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 class HTTPAuthServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
if (!BasicAuthenticationUtil.checkUserAuth(request, "basicAuth")) {
if (!BasicAuthenticationUtil.checkHeaderAuth(request, "basicAuth")) {
response.setStatus();
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", );
response.setHeader("WWW-authenticate", "Basic Realm=\"test\"");
return null;
}
} // 验证通过后
String client = request.getParameter("client");if (StringUtils.isBlank(client)) {
//......
} // 其他操作....
} public void doPost(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 class BasicAuthenticationUtil { /**
*
* @param request
* @param response
* @param sessionName
* @return
*/
public static boolean checkHeaderAuth(HttpServletRequest request, String sessionName) {
String authorization = request.getHeader("Authorization");
if ((authorization != null) && (authorization.length() > )) {
authorization = authorization.substring(, 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 static boolean 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 = new BASE64Encoder().encode(bstr);
return strEncode;
} /**
* 解码
*
* @param str
* @return
*/
@SuppressWarnings("restriction")
public static String base64Decode(String str) {
if (StringUtil.isBlank(str)) {
return null;
}
String s = null;
try {
BASE64Decoder decoder = new BASE64Decoder();
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;
}
return s;
} }
当request第一次到达服务器时,服务器没有认证的信息,服务器会返回一个401 Unauthozied给客户端。
认证之后将认证信息放在session,以后在session有效期内就不用再认证了。
以上就是HTTP基本认证(Basic Authentication)的JAVA实例代码全部内容
HTTP基本认证(Basic Authentication)的JAVA实例代码的更多相关文章
- HTTP基本认证(Basic Authentication)的JAVA示例
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息.但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证.下面来看看一看这个认证的工作过程:第一步: 客户端发送ht ...
- HTTP基本认证(Basic Authentication)的JAVA演示样例
大家在登录站点的时候.大部分时候是通过一个表单提交登录信息.可是有时候浏览器会弹出一个登录验证的对话框.例如以下图,这就是使用HTTP基本认证.以下来看看一看这个认证的工作过程:第一步: clien ...
- HTTP基础认证Basic Authentication
HTTP基础认证Basic Authentication Basic Authentication是一种HTTP访问控制方式,用于限制对网站资源的访问.这种方式不需要Cookie和Session,只需 ...
- Nancy 学习-身份认证(Basic Authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...
- java 发送带Basic Auth认证的http post请求实例代码
构造http header private static final String URL = "url"; private static final String APP_KEY ...
- 【Window】Tor(洋葱头路由)+Privoxy 网络实践(附带Java实例代码)
1.背景 平时我们需要访问onion后缀的网站,需要通过Tor(The Onion Router,洋葱路由器).一般来说安装Tor Broswer就可以满足需要.但是项目我要做的是通过程序来获取oni ...
- RSA非对称加密(java实例代码)
使用RSA对WebService传递的信息加密解密的基本思想是:服务器端提供一个WebService方法String getServerPublicKey(),客户端可以以此得到服务器端的公钥,然后使 ...
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- HTTP Basic Authentication认证
http://smalltalllong.iteye.com/blog/912046 ******************************************** 什么是HTTP Basi ...
随机推荐
- UITabBarController 详解
// UITabBarController 标签视图控制 // 主要管理没有层级关系的视图控制器 // 1. ViewControllers 所有被管理的视图控制器, 都在这个数组中 // 2. se ...
- 初始加载时edittext不自动获取焦点的方法
在做一个搜索功能时,刚进入界面,edittext直接自动获取焦点,这显然不是我想要的. 那么问题来了:如何关闭EditText自动获取焦点的? 尝试了好几个方法,在Java代码添加focus控制,在x ...
- ylbtech-LanguageSamples-Indexers(索引器)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Indexers(索引器) 1.A,示例(Sample) 返回顶部 “索引器”示例 本示 ...
- all-oone-data-structure(好)
哈哈,我用了HashMap, 双向链表,还有了HashSet来保存key的集合. 现在这道题目还只有 9.3%的AC率,难度为HardTotal Accepted: 9 Total Submissio ...
- hdu-Coins
http://acm.hdu.edu.cn/showproblem.php?pid=2844 Problem Description Whuacmers use coins.They have coi ...
- JAVA逐行读取TXT文件
package help; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp ...
- RocketMQ-创建MappedFile本地文件
了解RocketMQ的都知道,它会保存所有的消息到本地文件.这个文件就是 MappedFile,每一个文件对应一个MappedFile.默认情况下大小位1g. 在MessageStoreConfig中 ...
- Android RxJava/RxAndroid结合Retrofit使用
概述 RxJava是一个在 Java VM 上使用可观測的序列来组成异步的.基于事件的程序的库.更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上.告别迷之缩进. RxAnd ...
- JavaScript第二课
1.关于鼠标事件有: onmouseover(),onmouseout(),onmousedown(),onmouseup(),onclick()事件. 2.创建JavaScript对象: 方法1:通 ...
- ES6 对象扩展
1.属性和变量可以简写 let birth = '2000/01/01'; const Person = { name: '张三', //等同于birth: birth birth, // 等同于he ...