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"));
        }
    }

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

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

  • 相关阅读:
    winform中利用正则表达式得到有效的电话/手机号
    winform运行时如何接受参数?(示例)
    [基础]Javascript中的继承示例代码
    [转]C#中"is" vs "as"
    Javascript数组常用方法[包含MS AJAX.NET的prototype扩展方法]示例
    linq学习笔记(一)
    用winform应用程序登录网站的解决方案
    [转贴]操纵自如--页面内的配合与通信
    .net3.0中的扩展方法(示例)
    window.location或window.open如何指定target?
  • 原文地址:https://www.cnblogs.com/changhai/p/8423220.html
Copyright © 2011-2022 走看看