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令牌校验工具类,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!