Skip to content

Commit 2f4036e

Browse files
committed
更新Token刷新解释,看起来更通俗易懂
1 parent 982a32d commit 2f4036e

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ AccessToken认证,Redis的RefreshToken也可以用来判断用户是否在线
5656
本身AccessToken的过期时间为5分钟(配置文件可配置),RefreshToken过期时间为30分钟(配置文件可配置),当登录后时间过了5分钟之后
5757
,当前AccessToken便会过期失效,再次带上AccessToken访问JWT会抛出TokenExpiredException异常说明Token过期,开始判断是否要进
5858
行AccessToken刷新,首先Redis查询RefreshToken是否存在,以及时间戳和过期AccessToken所携带的时间戳是否一致,如果存在且一致就
59-
进行AccessToken刷新,且设置RefreshToken的过期时间为剩余过期时间加上一个AccessToken的过期时间,主要详情查看JWTFilter代码,
60-
最终将刷新的AccessToken存放在Response的Header中的Authorization字段返回(前端进行获取替换,下次用新的AccessToken进行访问)
59+
进行AccessToken刷新,过期时间为5分钟(配置文件可配置),时间戳为当前最新时间戳,同时也设置RefreshToken中的时间戳为当前最新时
60+
间戳,刷新过期时间重新为30分钟过期(配置文件可配置),最终将刷新的AccessToken存放在Response的Header中的Authorization字段返
61+
回(前端进行获取替换,下次用新的AccessToken进行访问)
6162
```
6263

6364
### 软件架构

src/main/java/com/wang/config/shiro/jwt/JwtFilter.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,15 @@ private boolean refreshToken(ServletRequest request, ServletResponse response) {
132132
if(JedisUtil.exists(Constant.PREFIX_SHIRO_REFRESH_TOKEN + account)){
133133
// Redis中RefreshToken还存在,获取RefreshToken的时间戳
134134
String currentTimeMillisRedis = JedisUtil.getObject(Constant.PREFIX_SHIRO_REFRESH_TOKEN + account).toString();
135-
// 获取当前AccessToken中的时间戳,与RefreshToken的时间戳对比
135+
// 获取当前AccessToken中的时间戳,与RefreshToken的时间戳对比,如果当前时间戳一致,进行AccessToken刷新
136136
if(JwtUtil.getClaim(token, Constant.CURRENT_TIME_MILLIS).equals(currentTimeMillisRedis)){
137-
// 通过说明该AccessToken时间戳与RefreshToken时间戳一致,进行AccessToken刷新
138137
// 获取当前最新时间戳
139138
String currentTimeMillis = String.valueOf(System.currentTimeMillis());
140-
// 获取RefreshToken剩余过期时间
141-
Long refreshTokenExpireTimeRedis = JedisUtil.getExpireTime(Constant.PREFIX_SHIRO_REFRESH_TOKEN + account);
142-
// 读取配置文件,获取一个AccessToken的过期时间
139+
// 读取配置文件,获取refreshTokenExpireTime属性
143140
PropertiesUtil.readProperties("config.properties");
144-
String accessTokenExpireTime = PropertiesUtil.getProperty("accessTokenExpireTime");
145-
// 设置RefreshToken中的时间戳为当前最新时间戳,且过期时间为RefreshToken剩余过期时间加上一个新的AccessToken过期时间
146-
JedisUtil.setObject(Constant.PREFIX_SHIRO_REFRESH_TOKEN + account, currentTimeMillis,
147-
refreshTokenExpireTimeRedis.intValue() + Integer.parseInt(accessTokenExpireTime));
141+
String refreshTokenExpireTime = PropertiesUtil.getProperty("refreshTokenExpireTime");
142+
// 设置RefreshToken中的时间戳为当前最新时间戳,且刷新过期时间重新为30分钟过期(配置文件可配置refreshTokenExpireTime属性)
143+
JedisUtil.setObject(Constant.PREFIX_SHIRO_REFRESH_TOKEN + account, currentTimeMillis, Integer.parseInt(refreshTokenExpireTime));
148144
// 刷新AccessToken,设置时间戳为当前最新时间戳
149145
token = JwtUtil.sign(account, currentTimeMillis);
150146
// 将新刷新的AccessToken再次进行Shiro的登录

0 commit comments

Comments
 (0)