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. AS3.0 效率优化

    1.显示对象:1.1.静态的不需互动的图形,使用Shape对象.(eg:getSize(newShape())=236) 1.2.不需要时间轴的互动图形,使用Sprite对象.(eg:getSize( ...

  2. \r和\n的区别

    /n  是换行/r   是回车 这是两码事,换行是指移动到下一行,回车是指移动到行首,我们通常所说的“回车”其实是这两个动作的结合.

  3. vim文本编辑工具—修改文件内容

    在vim中进行文本替换: 1.替换当前行中的from: :s/from/to/    (其中s是英文单词substitute第一个字母,表示替换的意思) :s/from/to/  ==  :.s/fr ...

  4. mac设置多个屏幕显示的问题

    点击 设置 -> 显示器 -> 排列,然后拉着菜单在两个显示器之间切换.

  5. DevExpress控件使用小结

    摘自: http://blog.sina.com.cn/s/blog_95cfa64601019wex.html .TextEditor(barEditItem)取文本 string editValu ...

  6. Druid对比Redshift

    Redshift 内部使用了亚马逊取得了授权的ParAccel 实时注入数据 抛开可能的性能不同, 有功能性的不同 Druid 适合分析大数据量的流式数据, 也能够实时加载和聚合数据一般来讲, 传统的 ...

  7. (转)Scala的“=>”符号简介

    Scala中的=>符号可以看做是创建函数实例的语法糖.例如:A => T,A,B => T表示一个函数的输入参数类型是“A”,“A,B”,返回值类型是T.请看下面这个实例: scal ...

  8. PHP图像操作:3D图、缩放、旋转、裁剪、加入水印(一)

    来源:http://www.ido321.com/875.html 1.利用php gd库的函数绘制3D扇形统计图 1: <?php 2: header("content-type&q ...

  9. Win7如何修改文件夹的默认视图,如何把详细信息改为平铺视图

    先任意进入一个文件夹,右击选择平铺视图.   然后点击左上角的组织,文件夹和搜索选项,在文件夹选项的查看中点击"应用到文件夹",然后点击确定,弹出对话框,再确定.   随后再浏览别 ...

  10. 请远离include_once和require_once[转]

    来自:http://www.poluoluo.com/jzxy/201306/216921.html 尽量使用include, 而不是include_once, 理由是 include_once需要查 ...