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. .net中的泛型

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

  2. unity3d-地图制作之云彩飘动

    首先,我先声明,关于美工制作我是一点都不了解,甚至基本上没接触过,所以今天开始我就兼并这美工加程序来学习. 当然,我只是对unity中的美术比较感兴趣而已,仅此而已. 所以,如果我在文章中讲的不对的地 ...

  3. transparent shadow caster unity

    https://forum.unity.com/threads/semitransparent-shadows.276490/ semitransparent shadows dither 类似alp ...

  4. less、sass、stylus

    less.sass.stylus 它们是三种类似的样式动态语言,属于css预处理语言,它们有类似css的语法,为css赋予了动态语言的特性.如变量.继承.运算.函数等.这么做是为了css的编写和维护. ...

  5. Java中的SPI(Service Provider Interface)

    转自:http://singleant.iteye.com/blog/1497259 最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结 ...

  6. 教你用 google-drive-ocamlfuse 在 Linux 上挂载 Google Drive

    如果你在找一个方便的方式在 Linux 机器上挂载你的 Google Drive 文件夹, Jack Wallen 将教你怎么使用 google-drive-ocamlfuse 来挂载 Google ...

  7. 解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错

    解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错 学习了:https://www.cnblogs.com/cnhkzyy/p/9119339.html se ...

  8. Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数

    一.查看jdk安装目录 [root@node001 ~]# whereis java java: /usr/bin/java /usr/local/java #java执行路径 [root@node0 ...

  9. PHP上传文件类 代码练习

    类文件: <?php class upload{ protected $fileName; protected $uploadPath; protected $maxSize; protecte ...

  10. GUID转换成16位字符串或19位唯一字符串

    整理几个经常使用GUID转换成16位字符串或19位唯一字符串方法: /// <summary> /// 依据GUID获取16位的唯一字符串 /// Author : 付义方 /// < ...