zoukankan      html  css  js  c++  java
  • Token验证(JWT)JwtUtil工具类 (2)

    这里直接写了一个JwtUtil工具类,省略拦截器操作及控制层操作

    public class JwtUtil {
        /**
         * 过期时间15分钟
         */
        private static final long EXPIRE_TIME = 15 * 60 * 1000;
        /**
         * token私钥
         */
        private static final String TOKEN_SECRET="DD5654D654DSD5S1D65S4D65S1D";
    
    
        /**
         * 生成签名15分钟后过期
         *
         * @param userName  用户名
         * @param userId   用户ID
         * @return 加密的token
         */
        public static String  sign(String userName,String userId){
            try {
                //过期时间
                Date date =new Date(System.currentTimeMillis()+EXPIRE_TIME);
                //私钥及加密算法
                Algorithm algorithm=Algorithm.HMAC256(TOKEN_SECRET);
                //设置头部信息
                Map<String,Object> header=new HashMap<>(2);
                header.put("typ","JWT");
                header.put("alg","hs256");
                //附带userName userId信息,生成签名
                return  JWT.create()
                        .withHeader(header)
                        .withClaim("userName",userName)
                        .withClaim("userId",userId)
                        .withExpiresAt(date)
                        .sign(algorithm);
    
            }catch (Exception ex){
                return null;
            }
        }
    
        /**
         * 校验token是否正确
         *
         * @param token  密钥
         * @return  是否正确
         */
        public static boolean  verify(String token){
            try{
                Algorithm algorithm=Algorithm.HMAC256(TOKEN_SECRET);
                JWTVerifier verifier=JWT.require(algorithm)
                        .build();
                DecodedJWT JWT=verifier.verify(token);
                return true;
            }catch (Exception ex){
                return false;
            }
        }
    
        /**
         * 获取token中的信息无需secret解密也能获取
         *
         * @param token 密钥
         * @return  token中包含的用户名
         */
        public static String  getUserName(String token){
            try {
                DecodedJWT jwt=JWT.decode(token);
                return  jwt.getClaim("userName").asString();
            }catch (JWTDecodeException ex){
                return null;
            }
        }
    
        /**
         * 获取token中的信息无需secret解密也能获取
         *
         * @param token 密钥
         * @return  token中包含的用户ID
         */
        public static String  getUserId(String token){
            try {
                DecodedJWT jwt=JWT.decode(token);
                return jwt.getClaim("userId").asString();
            }catch (JWTDecodeException ex){
                return null;
            }
        }
    }
    

      

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/BigPig-Winnie/p/11813568.html
Copyright © 2011-2022 走看看