38.自定义声明
创建自定义声明的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"));
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Eternal Night
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果