zoukankan      html  css  js  c++  java
  • jwt 工具类

    public class TokenUtils {
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        /**
         * 签名秘钥
         */
        public static final String SECRET = "token";
    
        /**
         * 生成token
         * @param id 一般传入userName
         * @return
         */
        public static String createJwtToken(String id){
            String issuer = "";
            String subject = "";
            long ttlMillis = 30*60*1000; 
            return createJwtToken(id, issuer, subject, ttlMillis);
        }
    
        /**
         * 生成Token
         * 
         * @param id
         *            编号
         * @param issuer
         *            该JWT的签发者,是否使用是可选的
         * @param subject
         *            该JWT所面向的用户,是否使用是可选的;
         * @param ttlMillis
         *            签发时间
         * @return token String
         */
        public static String createJwtToken(String id, String issuer, String subject, long ttlMillis) {
    
            // 签名算法 ,将对token进行签名
            SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
    
            // 生成签发时间
            long nowMillis = System.currentTimeMillis();
            Date now = new Date(nowMillis);
    
            // 通过秘钥签名JWT
            byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET);
            Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
    
            // Let's set the JWT Claims
            JwtBuilder builder = Jwts.builder().setId(id)
                .setIssuedAt(now)
                .setSubject(subject)
                .setIssuer(issuer)
                .signWith(signatureAlgorithm, signingKey);
            
            // if it has been specified, let's add the expiration
            if (ttlMillis >= 0) {
                long expMillis = nowMillis + ttlMillis;
                Date exp = new Date(expMillis);
                builder.setExpiration(exp);
            }
    
            // Builds the JWT and serializes it to a compact, URL-safe string
            return builder.compact();
    
        }
    
        // Sample method to validate and read the JWT
        public static Claims parseJWT(String jwt) {
            // This line will throw an exception if it is not a signed JWS (as expected)
            Claims claims = Jwts.parser()
                .setSigningKey(DatatypeConverter.parseBase64Binary(SECRET))
                .parseClaimsJws(jwt).getBody();
            return claims;
        }
    
        public static void main(String[] args) {
            System.out.println(TokenUtils.createJwtToken("admin"));
            System.out.println(TokenUtils.parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZG1pbiIsImlhdCI6MTUxNzg4NDU0OCwic3ViIjoiIiwiaXNzIjoiIiwiZXhwIjoxNTE3ODg2MzQ4fQ.AxGGAOiwOmnp5oKaSdlmny-zgZigsqgZY8fG_UxVLKs"));
        }
    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数

  • 相关阅读:
    文件查找和压缩
    shell脚本编程基础
    [模板]数据生成与对拍
    Codeforces Round #746 (Div. 2)
    Codeforces Round #712 (Div. 2)
    Codeforces Round #715 (Div. 2)
    Codeforces Round #752 (Div. 2)
    提高模拟赛Day8T3树上跑步
    提高模拟赛Day8T2最大匹配
    提高模拟赛Day8T1求中位数
  • 原文地址:https://www.cnblogs.com/changhai/p/8423220.html
Copyright © 2011-2022 走看看