• awt



    // TOKEN的有效期一天(S)
    private static final int TOKEN_TIME_OUT = 3_600;
    // 加密KEY
    private static final String TOKEN_ENCRY_KEY = "MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY";
    // 最小刷新间隔(S)
    private static final int REFRESH_TIME = 300;

    // 生产ID
    public static String getToken(Long id){
    Map<String, Object> claimMaps = new HashMap<>();
    claimMaps.put("id",id);
    long currentTime = System.currentTimeMillis();
    return Jwts.builder()
    .setId(UUID.randomUUID().toString())
    .setIssuedAt(new Date(currentTime)) //签发时间
    .setSubject("system") //说明
    .setIssuer("heima") //签发者信息
    .setAudience("app") //接收用户
    .compressWith(CompressionCodecs.GZIP) //数据压缩方式
    .signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式
    .setExpiration(new Date(currentTime + TOKEN_TIME_OUT * 1000)) //过期时间戳
    .addClaims(claimMaps) //cla信息
    .compact();
    }

    /**
    * 获取token中的claims信息
    *
    * @param token
    * @return
    */
    private static Jws<Claims> getJws(String token) {
    return Jwts.parser()
    .setSigningKey(generalKey())
    .parseClaimsJws(token);
    }

    /**
    * 获取payload body信息
    *
    * @param token
    * @return
    */
    public static Claims getClaimsBody(String token) {
    try {
    return getJws(token).getBody();
    }catch (ExpiredJwtException e){
    return null;
    }
    }

    /**
    * 获取hearder body信息
    *
    * @param token
    * @return
    */
    public static JwsHeader getHeaderBody(String token) {
    return getJws(token).getHeader();
    }

    /**
    * 是否过期
    *
    * @param claims
    * @return -1:有效,0:有效,1:过期,2:过期
    */
    public static int verifyToken(Claims claims) {
    if(claims==null){
    return 1;
    }
    try {
    claims.getExpiration()
    .before(new Date());
    // 需要自动刷新TOKEN
    if((claims.getExpiration().getTime()-System.currentTimeMillis())>REFRESH_TIME*1000){
    return -1;
    }else {
    return 0;
    }
    } catch (ExpiredJwtException ex) {
    return 1;
    }catch (Exception e){
    return 2;
    }
    }

    /**
    * 由字符串生成加密key
    *
    * @return
    */
    public static SecretKey generalKey() {
    byte[] encodedKey = Base64.getEncoder().encode(TOKEN_ENCRY_KEY.getBytes());
    SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
    return key;
    }

    public static void main(String[] args) {
    /* Map map = new HashMap();
    map.put("id","11");*/
    System.out.println(AppJwtUtil.getToken(1102L));
    Jws<Claims> jws = AppJwtUtil.getJws("eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAADWLQQqEMAwA_5KzhURNt_qb1KZYQSi0wi6Lf9942NsMw3zh6AVW2DYmDGl2WabkZgreCaM6VXzhFBfJMcMARTqsxIG9Z888QLui3e3Tup5Pb81013KKmVzJTGo11nf9n8v4nMUaEY73DzTabjmDAAAA.4SuqQ42IGqCgBai6qd4RaVpVxTlZIWC826QA9kLvt9d-yVUw82gU47HDaSfOzgAcloZedYNNpUcd18Ne8vvjQA");
    Claims claims = jws.getBody();
    System.out.println(claims.get("id"));

    }
  • 相关阅读:
    LongAdder和AtomicLong性能对比
    2,linux入门到上手-ssh安装配置及虚拟机基本使用
    markdown反射型xss漏洞复现
    快速构建第三方api应用
    PHP使用Redis
    laravel aritisan命令大全
    laravel5.5的服务容器分析
    【笔记JS/HTML/CSS】用div实现个性化button,背景半透明
    【GIMP学习】抠图方法二则
    【ubuntu】中文输入法安装二三事
  • 原文地址:https://www.cnblogs.com/KingAndPig/p/14072732.html
Copyright © 2020-2023  润新知