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 ...
随机推荐
- OM-销售订单行【订购项目】配置参数文件控制
ONT_RESTRICT_CUST_ITEMS OM:限制行层收货地址的客户项目 ONT_USE_MVIEW_FOR_ITEMS_LOV OM:为项目值列表使用物化视图(遵守项目可订购性规则)
- 轻量级web服务器lighttpd的编译及配置(for x86-linux)
转自:http://blog.163.com/ljf_gzhu/blog/static/131553440201211522317367/ 备注: PC Linux:Ubuntu-10.10 Linu ...
- [Android Memory] Shallow Heap大小计算释疑
转载自:http://blog.csdn.net/sodino/article/details/24186907 查看Mat文档时里面是这么描述Shallow Heap的:Shallow heap i ...
- 一些关于VC++开发的笔记
通常程序卡住了,主要有双方面的可能: (1)死循环了 (2)死锁了 要确定是否是死循环.能够通过调试器(经常使用Windbg)查看线程执行时间,假设隔了一段会儿两次查看的执行时间有非常大区别,那么非常 ...
- iOS:极光推送控制器跳转
在前面已经做完了极光消息的推送,那么有消息了,如何跳转到需要的控制器呢?其实,主要还是在userInfo这个消息里面做判断来处理,具体如下: 下面这两个是远程推送时接收消息的方法,这是应用程序提供的方 ...
- phpMyAdmin配置
一: (1):下载phpmyadmin,在官方最好 (2):个人建议最好将其安装在apache的htdocs文件中(apache的默认虚拟目录,或web访问目录) ...
- What is required for a successful backup of all files during hoi backup?
There is a typo in the body of this question. It should be "Hot" instead of "hoi" ...
- Linux 调度器发展简述
引言 进程调度是操作系统的核心功能.调度器只是是调度过程中的一部分,进程调度是非常复杂的过程,需要多个系统协同工作完成.本文所关注的仅为调度器,它的主要工作是在所有 RUNNING 进程中选择最合适的 ...
- SecureRandom产生强随机数简介
SecureRandom是强随机数生成器,主要应用的场景为:用于安全目的的数据数,例如生成秘钥或者会话标示(session ID),弱随机数生成器会产生严重的安全问题,而使用SecureRandom这 ...
- 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障
今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...