创建自定义声明的Token

/**
 * @Title testCreateTokenByClaims
 * @Description TODO 创建token(自定义申明)
 * @Author admin
 * @UpdateTime 2022/3/5 15:56
 * @Throws
 */
@Test
public void testCreateTokenByClaims() {
    // 获取当前系统时间
    long now = System.currentTimeMillis();
    // 设置过期时间:2分钟
    long exp = now + 120 * 1000;
    // 创建JwtBuilder对象
    JwtBuilder jwtBuilder = Jwts.builder()
            // 声明的标识{"jti":"8888"}
            .setId("8888")
            // 主体,用户(所面向的接收客户){"sub":"Rose"}
            .setSubject("Rose")
            // 设置签发时间 创建日期("ita":"年月日")
            .setIssuedAt(new Date())
            // 设置签名(算法,加盐)
            .signWith(SignatureAlgorithm.HS256,"xxxx")
            // 设置失效过期时间
            .setExpiration(new Date(exp))
            // 自定义申明
            .claim("roles","admin")
            .claim("logo","xxx.jpg");
            // 直接传入map
            // .addClaims("map");
    // 获取生成jwt令牌
    String token = jwtBuilder.compact();
    System.out.println(token);


    System.out.println("==================");
    // 分割字符.
    String[] split = token.split("\\.");
    // 分割第一部分:头部信息
    System.out.println(Base64Codec.BASE64.decodeToString(split[0]));
    // 分割第二部分:荷载信息
    System.out.println(Base64Codec.BASE64.decodeToString(split[1]));
    // 分割第三部分:签名信息  注:签名信息有加盐,无法解密  会形成乱码
    System.out.println(Base64Codec.BASE64.decodeToString(split[2]));
}

解析自定义声明的Token

/**
 * @Title testParseTokenByClaims
 * @Description TODO 解析token(自定义申明)
 * @Author admin 
 * @UpdateTime 2022/3/5 15:58 
 * @Throws 
 */
@Test
public  void testParseTokenByClaims(){
    String token="eyJhbGciOiJIUzI1NiJ9" +
            ".eyJqdGkiOiI4ODg4Iiwic3ViIjoiUm9zZSIsImlhdCI6MTY0NjQ2NzI1OCwiZXhwIjoxNjQ2NDY3Mzc4LCJyb2xlcyI6ImFkbWluIiwibG9nbyI6Inh4eC5qcGcifQ" +
            ".woiPo_st7QvjH09KgfOqC8HdHhAdcAfVRSwNklcC994";
    // 解析token  获取负载中声明的对象
    Claims claims = Jwts.parser()
            // 准备加盐秘钥
            .setSigningKey("xxxx")
            // 提供token
            .parseClaimsJws(token)
            // 添加主体
            .getBody();
    // 打印输出声明对象
    System.out.println("id:"+claims.getId());
    System.out.println("subject:"+claims.getSubject());
    System.out.println("issuedAt:"+claims.getIssuedAt());
    // 格式化时间
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("签发时间:"+simpleDateFormat.format(claims.getIssuedAt()));
    System.out.println("过期时间:"+simpleDateFormat.format(claims.getExpiration()));
    System.out.println("当前时间:"+simpleDateFormat.format(new Date()));
    // 获取自定义的声明
    System.out.println("roles:"+claims.get("roles"));
    System.out.println("logp:"+claims.get("logo"));
}