Token的实现

发布时间:2026/7/28 14:31:39

Token的实现 控制层 返回页面的时候生成唯一的ID并保存到session中分布式用springsession页面提交的时候控制层获取这个ID 查询存在session 就继续运行并删除保持只执行一次不存在就不运行由于我使用的是 注解AOPSpringSessionmd5生成token1注解类/** * Token */ //用在方法上 Target({ElementType.METHOD}) //被JVN保留 Retention(RetentionPolicy.RUNTIME) Documented public interface ToKen { /** 保存 **/ public boolean save() default false; /** 刪除 **/ public boolean remove() default false; }2 AOP核心代码 后续函数 boolean save false; for (Method method : methods) { if (method.getName().equals(methodName)) { Class[] clazzs method.getParameterTypes(); if (clazzs!nullclazzs.length arguments.lengthmethod.getAnnotation(ToKen.class)!null) { save method.getAnnotation(ToKen.class).save(); remove method.getAnnotation(ToKen.class).remove(); break; } } } if (save) { //为每一个控制层配置一个 String makeToken TokenProccessor.makeToken(); ModelAndView modelAndView new ModelAndView(); modelAndView.addObject(token,makeToken); request.getSession().setAttribute(token, makeToken); }3生成token函数import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import sun.misc.BASE64Encoder; public class TokenProccessor { /* * *1、把类的构造函数私有 *2、自己创建一个类的对象 *3、对外提供一个公共的方法返回类的对象 */ private TokenProccessor(){} private static final TokenProccessor instance new TokenProccessor(); /** * 返回类的对象 * return */ public static TokenProccessor getInstance(){ return instance; }生成Token/** * 生成Token * TokenNv6RRuGEVvmGjBjimI/gw * return */ public static String makeToken(){ //checkException // 7346734837483 834u938493493849384 43434384 String token (System.currentTimeMillis() new Random().nextInt(999999999)) ; //数据指纹 128位长 16个字节 md5 try { MessageDigest md MessageDigest.getInstance(md5); byte md5[] md.digest(token.getBytes()); //base64编码--任意二进制编码明文字符 adfsdfsdfsf BASE64Encoder encoder new BASE64Encoder(); System.out.println(encoder.encode(md5)); return encoder.encode(md5); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }4被请求的控制层String sessiontoken null; try { sessiontoken (String)request.getSession().getAttribute(token); } catch (Exception e) { // TODO: handle exception } if(sessiontokennull) { return mv; } if(!token.equals(sessiontoken)) { return mv; } request.getSession().invalidate();5跳转控制层/** * 註冊 * param request * return * throws Exception */ RequestMapping(value reg) ToKen(save true)//需要为改请求添加一个唯一的token ArchivesLog(operationType 請求, operationName 註冊頁面) public ModelAndView reg(HttpServletRequest request)throws Exception { ModelAndView modelAndView new ModelAndView(/views/user/androidregisteredsl.jsp); return modelAndView; }

相关新闻