token 保存到redis并设置有效期的代码
时间: 2023-12-18 10:03:27 浏览: 130
在Spring Boot中将Token保存到Redis并设置有效期的代码可以如下所示:
首先,确保已经配置好Redis的连接信息和依赖项。
1. 创建一个TokenUtil工具类,用于生成和验证Token:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Component
public class TokenUtil {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
public String generateToken(String username) {
Map<String, Object> claims = new HashMap<>();
claims.put("sub", username);
claims.put("created", new Date());
return Jwts.builder()
.setClaims(claims)
.setExpiration(generateExpirationDate())
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public String getUsernameFromToken(String token) {
String username;
try {
Claims claims = getClaimsFromToken(token);
username = claims.getSubject();
} catch (Exception e) {
username = null;
}
return username;
}
private Date generateExpirationDate() {
return new Date(System.currentTimeMillis() + expiration * 1000);
}
private Claims getClaimsFromToken(String token) {
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}
}
```
2. 创建一个TokenService服务类,用于操作Redis存储Token:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class TokenService {
private static final String REDIS_KEY_PREFIX = "token:";
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void saveToken(String username, String token, Long expiration) {
String key = REDIS_KEY_PREFIX + username;
redisTemplate.opsForValue().set(key, token, expiration, TimeUnit.SECONDS);
}
public String getToken(String username) {
String key = REDIS_KEY_PREFIX + username;
return redisTemplate.opsForValue().get(key);
}
public void deleteToken(String username) {
String key = REDIS_KEY_PREFIX + username;
redisTemplate.delete(key);
}
}
```
在上述代码中,TokenUtil类用于生成和验证Token,TokenService类用于将Token保存到Redis中,并提供获取和删除Token的方法。
注意,在使用上述代码之前,需要在配置文件中设置好Redis的连接信息、JWT的密钥和Token的有效期。
这样,当用户登录成功后,可以使用TokenUtil生成Token,并通过TokenService将Token保存到Redis中,设置对应的有效期。在后续需要验证用户身份的请求中,通过TokenService从Redis中获取Token,并使用TokenUtil验证Token的有效性。
阅读全文