如何让String token = JwtTokenUtilsgetTokenStringvalueOfusergetIdusergetPassword;的token有效期设为失效
要使JWT token失效,可以使用以下方法之一:
- 在JWT token中包含过期时间(expiration time),这样可以在验证JWT token时检查过期时间是否已过。在创建JWT token时,可以设置过期时间,例如:
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
String token = Jwts.builder()
.setSubject(subject)
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS512, secretKey)
.compact();
在验证JWT token时,可以检查过期时间是否已过:
JwtParser parser = Jwts.parser().setSigningKey(secretKey);
Claims claims = parser.parseClaimsJws(token).getBody();
Date expirationDate = claims.getExpiration();
Date now = new Date();
if (now.after(expirationDate)) {
// token已过期
}
- 在服务端保存JWT token的黑名单,当需要使JWT token失效时,将JWT token加入黑名单中。在验证JWT token时,先检查JWT token是否在黑名单中。
例如,可以使用Redis等缓存工具保存JWT token的黑名单:
// 将JWT token加入黑名单中
redisTemplate.opsForSet().add("jwt:token:blacklist", token);
// 验证JWT token时,检查JWT token是否在黑名单中
if (redisTemplate.opsForSet().isMember("jwt:token:blacklist", token)) {
// token已失效
}
注意:使用第二种方法使JWT token失效时,需要确保所有服务端都能访问同一个黑名单。如果使用多个服务端,可以使用分布式缓存工具,例如Redis Cluster等
原文地址: https://www.cveoy.top/t/topic/eNTe 著作权归作者所有。请勿转载和采集!