Java TokenProcessor令牌校验工具类

网友投稿 240 2023-06-04


Java TokenProcessor令牌校验工具类

关于TokenProcessor令牌校验工具类废话不多说了,直接给大家贴代码了,一切内容就在下面一段代码中,具体代码详情如下所示:

public class TokenProcessor {

private long privious;// 上次生成表单标识号得时间值

private static TokenProcessor instance = new TokenProcessor();

public static String FORM_TOKEN_KEY = "FORM_TOKEN_KEY";

private TokenProcessor() {

}

public static TokenProcessor getInstance() {

return instance;

}

/**

* 验证请求中得标识号是否有效,如果请求中的表单标识与当前用户session中的相同,返回结果true=

*/

public synchronized boolean isTokenValid(HttpServletRequest request) {

// 为避免session对象不存在时候创建Session对象

HttpSession session = request.getSession(false);

if (session == null) {

return false;

}

String saved = (String) session.getAttribute(FORM_TOKEN_KEY);

if (saved == null) {

return false;

}

String token = (String) request.getParameter(FORM_TOKEN_KEY);

if (token == null) {

return false;

}

return saved.equals(token);

}

/**

* 验证请求中得标识号是否有效,如果请求中的表单标识与当前用户session中的相同,返回结果true=

*/

public synchronized boolean isTokenValid(HttpServletRequest request,String token) {

// 未避免session对象不存在时候创建Session对象

HttpSession session = request.getSession(false);

if (session == null) {

return false;

}

String saved = (String) session.getAttribute(FORM_TOKEN_KEY);

if (saved == null) {

return false;

}

if (token == null) {

return false;

}

return saved.equals(token);

}

/**

* 清除存储在当前用户session中的表单标识号

*/

public synchronized void reset(HttpServletRequest request) {

HttpSession session = request.getSession(false);

if (session == null) {

return;

}

session.removeAttribute(FORM_TOKEN_KEY);

}

/**

* 产生表单标识号并将之保存在当前用户得session中

*/

public synchronized void saveToken(HttpServletRequest request) {

HttpSession session = request.getSession();

try {

byte id[] = session.getId().getBytes();

long current = System.currentTimeMillis();

if (current == privious) {

current++;

}

privious = current;

byte now[] = String.valueOf(current).getBytes();

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(id);

md.update(now);

String token = toHex(md.digest());

session.setAttribute(FORM_TOKEN_KEY, token);

} catch (NoSuchAlgorithmException e) {

}

}

/**

* 将一个字节数转换成十六进制得字符串

*/

public String toHex(byte buffer[]) {

StringBuffer sb = new StringBuffer(buffer.length * 2);

for (int i = 0; i < buffer.length; i++) {

sb.append(Character.forDigit((buffer[i] & 0x60) >> 4, 16));

sb.append(Character.forDigit(buffhttp://er[i] & 0x0f, 16));

}

rhttp://eturn sb.toString();

}

}

以上所述是给大家介绍的java TokenProcessor令牌校验工具类,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:canvas压缩图片转换成base64格式输出文件流
下一篇:Java中ArrayList类的源码解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~