BasicAuthenticationUtil

import java.io.IOException;
import java.security.MessageDigest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import cn.evun.tms.common.dto.LoginSysUser;
import cn.evun.tms.system.service.SysUserService;
import sun.misc.*; /**
* basic Auth 认证方式
*
* @author Geely
*
*/
@Component
public class BasicAuthenticationUtil { @Autowired
private SysUserService sysUserService; /**
*
* @param request
* @param response
* @param sessionName
* @return
*/
public boolean checkHeaderAuth(HttpServletRequest request, String sessionName) {
String authorization = request.getHeader("Authorization");
if (StringUtils.isBlank(authorization) || authorization.length() < 6) {
return false;
} authorization = authorization.substring(6, authorization.length());
String decodedAuth = base64Decode(authorization);
if (decodedAuth == null || "".equals(decodedAuth)) {
decodedAuth = "";
} String[] useAuth = decodedAuth.split(":");
if (useAuth.length < 2) {
return false;
} LoginSysUser sysUser = sysUserService.getUserByLogin(useAuth[0], encoderByMd5(useAuth[1]));
if (sysUser == null) {
return false;
} if (StringUtil.isNotBlank(sessionName)) {
request.getSession().setAttribute(sessionName, decodedAuth);
} return true; } /**
*
* @param request
* @param response
* @param sessionName
* @return
*/
public boolean checkUserAuth(HttpServletRequest request, String sessionName) {
String sessionAuth = null;
if (StringUtil.isNotBlank(sessionName)) {
sessionAuth = (String) request.getSession().getAttribute(sessionName);
if (sessionAuth == null || "".equals(sessionAuth)) {
return false;
} String[] useAuth = sessionAuth.split(":");
if (useAuth.length < 2) {
return false;
} else {
LoginSysUser sysUser = sysUserService.getUserByLogin(useAuth[0], encoderByMd5(useAuth[1]));
if (sysUser != null) {
return true;
}
} return false;
}
return true;
} public static void redirect(HttpServletResponse response) {
response.setStatus(401);
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("WWW-authenticate", "Basic Realm=\"test\"");
} /**
* 编码
*
* @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 (IOException e) {
s = null;
}
return s;
} /**
* 对字符串md5加密(大写+数字)
*
* @param str
* 传入要加密的字符串
* @return MD5加密后的字符串
*/ public static String encoderByMd5(String s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
String strMd5 = null;
try {
byte[] bt = s.getBytes("UTF8");
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
md.update(bt);
// 获得密文
byte[] mdt = md.digest();
// 把密文转换成十六进制的字符串形式
int j = mdt.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = mdt[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
strMd5 = new String(str).toLowerCase();
} catch (Exception e) {
strMd5 = null;
}
return strMd5;
} }

使用

if (!basicAuthenticationUtil.checkUserAuth(request, BASICAUTH_SESSION_NAME)
&& !basicAuthenticationUtil.checkHeaderAuth(request, BASICAUTH_SESSION_NAME)) {
BasicAuthenticationUtil.redirect(response);
return null;
}

Http basic Auth 认证方式帮助类的更多相关文章

  1. ios开发使用Basic Auth 认证方式

    http://blog.csdn.net/joonchen111/article/details/48447813 我们app的开发通常有2种认证方式   一种是Basic Auth,一种是OAuth ...

  2. iOS AFNetWorking下得Basic Auth认证请求方式

    我新入职了一家公司,做了一个项目,服务器的大哥说他采用的是Basic Auth认证请求方式,一般我们用的都是OAuth的认证方式,下面我们就对比一下这两种认证方式 百度百科得到如下 Basic Aut ...

  3. java 发送带Basic Auth认证的http post请求

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  4. java 发送带Basic Auth认证的http post请求实例代码

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  5. HttpClient 三种 Http Basic Authentication 认证方式,你了解了吗?

    Http Basic 简介 HTTP 提供一个用于权限控制和认证的通用框架.最常用的 HTTP 认证方案是 HTTP Basic authentication.Http Basic 认证是一种用来允许 ...

  6. 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证

    本文是精讲RestTemplate第9篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  7. Etcd安全配置之Basic Auth认证

    <中小团队落地配置中心详解>文章中我们介绍了如何基于Etcd+Confd构建配置中心,最后提到Etcd的安全问题时说了可以使用账号密码认证以达到安全访问的目的,究竟该如何开启认证以及怎么设 ...

  8. HTTP Basic auth认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...

  9. httpclient进行basic auth认证

    private HttpClientContext context = HttpClientContext.create(); public void addUserOAuth(String user ...

随机推荐

  1. 【js UUID】JS生成UUID 使用

    * 生成UUID * @returns */ function UUID() { var s = []; var hexDigits = "0123456789abcdef"; f ...

  2. jQuery Ajax 参数解析

    简单的例子: $.ajax({ type:"post", data:{a:acon,b:bcon} , url:"ajax.php", async:false ...

  3. .net中的泛型

    泛型把类或方法的类型的确定推迟到实例化该类或方法的时候 ,也就是说刚开始声明是不指定类型,等到要使用(实例化)时再指定类型 泛型可以用于  类.方法.委托.事件等 下面先写一个简单的泛型 public ...

  4. Netty游戏服务器二

    上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理. 接着我们开始写处理客户端连接,发送接收数据的类ServerHandler. public class Ser ...

  5. python之epoll服务器源码分析

    #!/usr/bin/env python # -*- coding: utf8 -*- import socket, select EOL1 = b'/r/n' EOL2 = b'/r/n/r/n' ...

  6. 使用MapReduce实现二度人脉搜索算法

    一,背景介绍 在新浪微博.人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似“你可能感兴趣的人”.“间接关注推荐”等好友推荐的功能,其中就包含了二度人脉算法. 二,算法实现 原 ...

  7. Documentation/ABI/testing/sysfs-block.txt

    Chinese translated version of Documentation/ABI/testing/sysfs-block.txt If you have any comment or u ...

  8. Struts基本概念

    内容源自: Struts2基本概念 一.struts2体系结构: 1.Web浏览器请求一个资源.2.过滤器Dispatcher查找方法,确定适当的Action.3.拦截器自动对请求应用通用功能,如验证 ...

  9. Java开发岗位面试题归类---怎么好好的准备面试,也算是发展学习方向

    转载:http://blog.csdn.net/qq_27093465/article/details/52181860 一.Java基础 1. String类为什么是final的. 自己找的参考答案 ...

  10. MySQL SELECT 语句

    SELECT语句: products表例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWluZ18xMDAx/font/5a6L5L2T ...