这节主要讲用redis存储token,跟shiro基本上没有关系。
但是与是使用shiro做无状态管理所需要的。
一、token组成:
(1)在redis中存储 [key] tokens:UUID-key [value] usernamePasswordToken的JSON字符串 [expire] 过期时间
(2)在java中的数据模型
public class Token implements Serializable {
private static final long serialVersionUID = 4043470238789599973L;
private String token;
private Date expireTime;
public Token(String token, Date expireTime) {
super();
this.token = token;
this.expireTime = expireTime;
}
}
二、token管理
用户通过redis获取token对应的登录信息。
public interface TokenManager {
Token saveToken(UsernamePasswordToken token);
UsernamePasswordToken getToken(String key);
boolean deleteToken(String key);
}
实现类的具体方法:
(1)存储token
public Token saveToken(UsernamePasswordToken usernamePasswordToken) {
String key = UUID.randomUUID().toString();
redisTemplate.opsForValue().
set(TOKEN_PREFIX + key,
JSONObject.toJSONString(usernamePasswordToken),
expireSeconds,
TimeUnit.SECONDS);
return new Token(key, DateUtils.addSeconds(new Date(), expireSeconds));
}
(2)获取token
将token转化为shiro登录信息:UsernamePasswordToken
public UsernamePasswordToken getToken(String key) {
String json = redisTemplate.opsForValue().get(TOKEN_PREFIX + key);
if (!StringUtils.isEmpty(json)) {
UsernamePasswordToken usernamePasswordToken =
JSONObject.parseObject(json, UsernamePasswordToken.class);
return usernamePasswordToken;
}
return null;
}
该博客介绍了如何在Spring Boot应用中结合Redis来存储JWT Token。内容包括Token的组成和管理,特别是如何在Java中建立数据模型,并利用Redis进行Token的存储和获取,以及如何将Token转换为Shiro的登录信息UsernamePasswordToken。
642

被折叠的 条评论
为什么被折叠?



