java-jwt-3.16.0
@Test
public void testJwt() {
System.out.println("1. 用户登录");
String username = "jiayanchao";
String password = "asd123456";
System.out.println(" 登录过程,验证用户名和密码,成功继续,失败返回: 用户名或者密码错误");
//使用HS256生成token,有人使用用户的密码做密钥,不好
// Payload的内容只经过了 Base64 编码,对客户端来说当于明文存储,所以不要放置敏感信息。
String secret = "2e74s0=f+(&9ychj2!#+h&of-l0sk)%%2u9ty(#a(9xgn=_nf41";
String accessToken = JWT.create()
.withClaim("username", username) // 声明变量数据
.withClaim("userId", 11) // 声明变量数据
.withExpiresAt(new Date(System.currentTimeMillis() + 30 * 60 * 1000)) // 过期时间 30分钟
.sign(Algorithm.HMAC256(secret)); /// 签名
String refreshToken = JWT.create()
.withClaim("username", username) // 声明变量数据
.withClaim("userId", 11) // 声明变量数据
.withExpiresAt(new Date(System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000)) // 7天
.sign(Algorithm.HMAC256(secret)); /// 签名
System.out.println("2. 用户登录成功返回两个token");
System.out.println("accessToken: "+accessToken);
System.out.println("refreshToken: "+refreshToken);
System.out.println("\n3. 用户个本地保存token");
System.out.println("\n4. 携带accessToken访问接口");
// Thread.sleep(2000); //测过期
// key += "1"; // 测签名
//验证过程
try {
JWT.require(Algorithm.HMAC256(secret)).build().verify(accessToken);
System.out.println("\n5. 验证access_token, 如何通过就正常处理返回数据");
} catch (TokenExpiredException e) {
logger.error("access_token过期 返回401");
} catch (SignatureVerificationException e) {
logger.error("签名被修改 返回401");
}
System.out.println("\n6. 验证失败需要客户端掉用/refresh接口,使用refreshToken获取新的accessToken");
System.out.println("\n7. 验证refreshToken过期就需要重新登录");
}