前言:JWT 即 Json WebToken,是一种无状态的用户认证令牌
使用步骤
一、引入maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
二、使用Jwts生成JWT令牌
@Test
public void JWTTest() throws InterruptedException {
long currentTimeMillis = System.currentTimeMillis();
Date issuedDate = new Date(currentTimeMillis); // 签发日期 = 当前时间
Date expireDate = new Date(currentTimeMillis + (1000 * 5)); // 到期日期 = 当前时间 + 5s
String jwt = Jwts.builder()
.setId("666") // 设置id
.setSubject("主题") // 设置主题
.claim("parameter","1") // 设置自定义参数
.setIssuedAt(issuedDate) // 设置签发时间
.setExpiration(expireDate) // 设置过期时间
.signWith(SignatureAlgorithm.HS256, "zbinyds") // 设置JWT秘钥(非常重要,不能泄露)
.compact();
System.out.println("生成后的JWT令牌为:" + jwt);
// Thread.sleep(10 * 1000); // 休眠10s
// 将生成的jwt令牌进行解码
Claims claims = Jwts.parser().setSigningKey("zbinyds").parseClaimsJws(jwt).getBody();
System.out.println("解码后的JWT令牌信息:" + claims);
}
生成后的JWT令牌为:eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLkuLvpopgiLCJwYXJhbWV0ZXIiOiIxIiwiaWF0IjoxNjYyNzg0NjM0LCJleHAiOjE2NjI3ODQ2Mzl9.aCLiXZPLLGwfvGZ3N9aAXO1g2tKKui08NNBwDaXWY4k
解码后的JWT令牌信息:{jti=666, sub=主题, parameter=1, iat=1662784634, exp=1662784639}
此时,Jwt令牌就已经生成成功了。
注意:当令牌过期时,我们进行解码操作,会发生如下异常
io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-09-10T12:40:48Z. Current time: 2022-09-10T12:40:54Z, a difference of 6453 milliseconds. Allowed clock skew: 0 milliseconds.