Java TokenProcessor令牌校验工具类
关于TokenProcessor令牌校验工具类废话不多说了,直接给大家贴代码了,一切内容就在下面一段代码中,具体代码详情如下所示:
publicclassTokenProcessor{
privatelongprivious;//上次生成表单标识号得时间值
privatestaticTokenProcessorinstance=newTokenProcessor();
publicstaticStringFORM_TOKEN_KEY="FORM_TOKEN_KEY";
privateTokenProcessor(){
}
publicstaticTokenProcessorgetInstance(){
returninstance;
}
/**
*验证请求中得标识号是否有效,如果请求中的表单标识与当前用户session中的相同,返回结果true=
*/
publicsynchronizedbooleanisTokenValid(HttpServletRequestrequest){
//为避免session对象不存在时候创建Session对象
HttpSessionsession=request.getSession(false);
if(session==null){
returnfalse;
}
Stringsaved=(String)session.getAttribute(FORM_TOKEN_KEY);
if(saved==null){
returnfalse;
}
Stringtoken=(String)request.getParameter(FORM_TOKEN_KEY);
if(token==null){
returnfalse;
}
returnsaved.equals(token);
}
/**
*验证请求中得标识号是否有效,如果请求中的表单标识与当前用户session中的相同,返回结果true=
*/
publicsynchronizedbooleanisTokenValid(HttpServletRequestrequest,Stringtoken){
//未避免session对象不存在时候创建Session对象
HttpSessionsession=request.getSession(false);
if(session==null){
returnfalse;
}
Stringsaved=(String)session.getAttribute(FORM_TOKEN_KEY);
if(saved==null){
returnfalse;
}
if(token==null){
returnfalse;
}
returnsaved.equals(token);
}
/**
*清除存储在当前用户session中的表单标识号
*/
publicsynchronizedvoidreset(HttpServletRequestrequest){
HttpSessionsession=request.getSession(false);
if(session==null){
return;
}
session.removeAttribute(FORM_TOKEN_KEY);
}
/**
*产生表单标识号并将之保存在当前用户得session中
*/
publicsynchronizedvoidsaveToken(HttpServletRequestrequest){
HttpSessionsession=request.getSession();
try{
byteid[]=session.getId().getBytes();
longcurrent=System.currentTimeMillis();
if(current==privious){
current++;
}
privious=current;
bytenow[]=String.valueOf(current).getBytes();
MessageDigestmd=MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
Stringtoken=toHex(md.digest());
session.setAttribute(FORM_TOKEN_KEY,token);
}catch(NoSuchAlgorithmExceptione){
}
}
/**
*将一个字节数转换成十六进制得字符串
*/
publicStringtoHex(bytebuffer[]){
StringBuffersb=newStringBuffer(buffer.length*2);
for(inti=0;i>4,16));
sb.append(Character.forDigit(buffer[i]&0x0f,16));
}
returnsb.toString();
}
}
以上所述是小编给大家介绍的JavaTokenProcessor令牌校验工具类,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!