public void logoutHttpServletRequest request String token = requestgetHeadertoken;如何让token的时间失效不使用Redis与数据库存储不使用Java自带的定时器
一种方法是使用JWT(JSON Web Token)来实现token失效。JWT是一种安全的身份验证机制,它可以在token中包含一些额外的信息,如过期时间。当客户端请求时,服务器会验证token是否过期,如果过期则拒绝请求。
下面是一个简单的示例代码:
- 添加依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
- 生成JWT token
public String generateToken(String userId) {
return Jwts.builder()
.setSubject(userId)
.setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hour
.signWith(SignatureAlgorithm.HS512, "secret")
.compact();
}
- 验证token是否有效
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey("secret").parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
在logout方法中,可以调用invalidateToken方法来让token失效:
public void logout(HttpServletRequest request) {
String token = request.getHeader("token");
invalidateToken(token);
}
public void invalidateToken(String token) {
// do nothing, token will automatically expire
}
使用JWT来实现token失效的好处是不需要在服务器端存储token,只需要在生成token时设置过期时间即可。缺点是如果需要立即让token失效,需要等到token过期才能生效
原文地址: https://www.cveoy.top/t/topic/eRc8 著作权归作者所有。请勿转载和采集!