目录
JWT-生成
具体代码
/**
* 测试JWT令牌的生成
*/
@Test
public void TestJWT() {
// 设置自定义内容
Map<String, Object> claims = new HashMap<>();
claims.put("id", 1);
claims.put("name", "hkm");
String jwt = Jwts.builder()
.signWith(SignatureAlgorithm.HS256, "secretKey") // 设置签名算法及密钥名称
.setClaims(claims) // 设置自定义内容(载荷)
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)) // 设置令牌有效期为1小时
.compact();
System.out.println(jwt);
}
运行结果如下
eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaGttIiwiaWQiOjEsImV4cCI6MTY5MzAzNTk3NX0.6PeZU0Zk9znGehWzIS7ts03WIdatpxjVZWXg2JcRNbk
JWT-校验
具体代码
/**
* 校验JWP令牌的生成
*/
@Test
public void TestParseJWT() {
Claims claims = Jwts.parser()
.setSigningKey("secretKey") // todo 设置对应的密钥名称
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaGttIiwiaWQiOjEsImV4cCI6MTY5MzAzNTk3NX0.6PeZU0Zk9znGehWzIS7ts03WIdatpxjVZWXg2JcRNbk")// todo 设置要解析的JWT令牌内容
.getBody(); // todo 获取body部分信息
System.out.println(claims);
}
运行结果如下
{name=hkm, id=1, exp=1693035975}
小结
- JWT校验时使用的签名密钥,必须和生成JWT令牌时使用的密钥是配套的
- 如果JWT令牌解析校验时报错,则说明JWT令牌被篡改或者失效了(超过了有效器),令牌非法