zoukankan      html  css  js  c++  java
  • 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"));

    }
  • 相关阅读:
    什么是shell
    shell种类
    centos7 安装JAVA (JDK 1.8) 并配置环境变量
    netcore liunx docker修改默认的Datetime format
    centos 7 安装 mysql 8.0.18
    centos 解决 mysql command not found
    centos 7 + Net Core 3.0 + Docker 配置说明(不含https)
    centos 7 安装golang1.13.5
    centos 7 安装git并配置ssh
    阿里云服务器 centos 7 安装postgresql 11
  • 原文地址:https://www.cnblogs.com/KingAndPig/p/14072732.html
Copyright © 2011-2022 走看看