栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-shiro-Boot-4 存储token

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-shiro-Boot-4 存储token

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号