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

      jwt 工具类 代码

    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.JwtBuilder;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.util.Base64;
    import java.util.Date;
    
    /**
     * 描述
     *
     * @author jm
     * @version 1.0
     * @package entity *
     * @since 1.0
     */
    public class JwtUtil {
        //有效期为
        public static final Long JWT_TTL = 3600000L;// 60 * 60 *1000  一个小时
    
        //Jwt令牌信息
        public static final String JWT_KEY = "itcast";
    
        /**
         * 生成令牌
         * @param id
         * @param subject
         * @param ttlMillis
         * @return
         */
        public static String createJWT(String id, String subject, Long ttlMillis) {
            //指定算法
            SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
    
            //当前系统时间
            long nowMillis = System.currentTimeMillis();
            //令牌签发时间
            Date now = new Date(nowMillis);
    
            //如果令牌有效期为null,则默认设置有效期1小时
            if (ttlMillis == null) {
                ttlMillis = JwtUtil.JWT_TTL;
            }
    
            //令牌过期时间设置
            long expMillis = nowMillis + ttlMillis;
            Date expDate = new Date(expMillis);
    
            //生成秘钥
            SecretKey secretKey = generalKey();
    
            //封装Jwt令牌信息
            JwtBuilder builder = Jwts.builder()
                    .setId(id)                    //唯一的ID
                    .setSubject(subject)          // 主题  可以是JSON数据
                    .setIssuer("admin")          // 签发者
                    .setIssuedAt(now)             // 签发时间
                    .signWith(signatureAlgorithm, secretKey) // 签名算法以及密匙
                    .setExpiration(expDate);      // 设置过期时间
            return builder.compact();
        }
    
        /**
         * 生成加密 secretKey
         *
         * @return
         */
        public static SecretKey generalKey() {
            byte[] encodedKey = Base64.getEncoder().encode(JwtUtil.JWT_KEY.getBytes());
            SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
            return key;
        }
    
    
        /**
         * 解析令牌数据
         *
         * @param jwt
         * @return
         * @throws Exception
         */
        public static Claims parseJWT(String jwt) throws Exception {
            SecretKey secretKey = generalKey();
            return Jwts.parser()
                    .setSigningKey(secretKey)
                    .parseClaimsJws(jwt)
                    .getBody();
        }
    
        public static void main(String[] args) {
            String jwt = JwtUtil.createJWT("test", "test", null);
            System.out.println(jwt);
            try {
                Claims claims = JwtUtil.parseJWT(jwt);
                System.out.println(claims);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
    
        }
    }
    

      

  • 相关阅读:
    自己搭建一个vue项目
    nodejs 后台开发入门
    bootstrap table入门例子
    datatable入门
    猜数字案例
    Cookie
    管理系统案例
    PHP操作数据库(以MySQL为例)
    数据库(以MySQL为例)
    案例:音乐列表
  • 原文地址:https://www.cnblogs.com/Jomini/p/14163713.html
Copyright © 2011-2022 走看看