Spring-shiro-Boot-4 存储token

该博客介绍了如何在Spring Boot应用中结合Redis来存储JWT Token。内容包括Token的组成和管理,特别是如何在Java中建立数据模型,并利用Redis进行Token的存储和获取,以及如何将Token转换为Shiro的登录信息UsernamePasswordToken。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这节主要讲用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;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值