登录验证token相关代码

  • 编写JwtUtil(utils包)
  //    秘钥
    private static final String jwtToken = "123456Mszlu!@#$$";

    public static String genToken(Map<String,Object> claims){
//         = new HashMap<>();
//        claims.put("userId",userId);
        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken
                .setClaims(claims) // body数据,要唯一,自行设置
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间
        String token = jwtBuilder.compact();
        return token;
    }

    //    解析token
    public static Map<String, Object> parseToken(String token){
        try {
            Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
            return (Map<String, Object>) parse.getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    //测试生成token
    public static void main(String[] args) {
        Map<String,Object> claims  = new HashMap<>();
        claims.put("userId",1);
        String token = genToken(claims);
        System.out.println(parseToken(token));
        System.out.println(token);

    }
  • 编写登录拦截器进行token拦截(interceptors)

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //令牌验证
        String token = request.getHeader("Authorization");
        try{
            Map<String,Object> claims= JwtUtil.parseToken(token);
            //把业务数据存储到TheadLocal中
            ThreadLocalUtil.set(claims);
            System.out.println("2");
            return true;
        }catch(Exception e) {
            response.setStatus(401);
            System.out.println("1");
            return false;
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //清空TheadLocal中的数据
        ThreadLocalUtil.remove();
    }
}
  • 编写ThreadLocal存储业务数据,使用可以直接调用
    
    /**
     * ThreadLocal 工具类
     */
    @SuppressWarnings("all")
    public class ThreadLocalUtil {
        //提供ThreadLocal对象,
        private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
    
        //根据键获取值
        public static <T> T get(){
            return (T) THREAD_LOCAL.get();
        }
    	
        //存储键值对
        public static void set(Object value){
            THREAD_LOCAL.set(value);
        }
        
        //清除ThreadLocal 防止内存泄漏
        public static void remove(){
            THREAD_LOCAL.remove();
        }
    }
    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值