token刷新机制修改
This commit is contained in:
parent
5b0dc56f7e
commit
99a43c1d95
@ -1,5 +1,7 @@
|
|||||||
package com.macro.mall.security.util;
|
package com.macro.mall.security.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Claims;
|
||||||
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.Jwts;
|
||||||
import io.jsonwebtoken.SignatureAlgorithm;
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
@ -120,25 +122,49 @@ public class JwtTokenUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断token是否可以被刷新
|
* 当原来的token没过期时是可以刷新的
|
||||||
*/
|
|
||||||
private boolean canRefresh(String token) {
|
|
||||||
return !isTokenExpired(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 当原来的token没过期是可以刷新
|
|
||||||
*
|
*
|
||||||
* @param oldToken 带tokenHead的token
|
* @param oldToken 带tokenHead的token
|
||||||
*/
|
*/
|
||||||
public String refreshHeadToken(String oldToken) {
|
public String refreshHeadToken(String oldToken) {
|
||||||
|
if(StrUtil.isEmpty(oldToken)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String token = oldToken.substring(tokenHead.length());
|
String token = oldToken.substring(tokenHead.length());
|
||||||
if (canRefresh(token)) {
|
if(StrUtil.isEmpty(token)){
|
||||||
Claims claims = getClaimsFromToken(token);
|
return null;
|
||||||
|
}
|
||||||
|
//token校验不通过
|
||||||
|
Claims claims = getClaimsFromToken(token);
|
||||||
|
if(claims==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//如果token已经过期,不支持刷新
|
||||||
|
if(isTokenExpired(token)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//如果token在30分钟之内刚刷新过,返回原token
|
||||||
|
if(tokenRefreshJustBefore(token,30*60)){
|
||||||
|
return token;
|
||||||
|
}else{
|
||||||
claims.put(CLAIM_KEY_CREATED, new Date());
|
claims.put(CLAIM_KEY_CREATED, new Date());
|
||||||
return generateToken(claims);
|
return generateToken(claims);
|
||||||
}
|
}
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断token在指定时间内是否刚刚刷新过
|
||||||
|
* @param token 原token
|
||||||
|
* @param time 指定时间(秒)
|
||||||
|
*/
|
||||||
|
private boolean tokenRefreshJustBefore(String token, int time) {
|
||||||
|
Claims claims = getClaimsFromToken(token);
|
||||||
|
Date created = claims.get(CLAIM_KEY_CREATED, Date.class);
|
||||||
|
Date refreshDate = new Date();
|
||||||
|
//刷新时间在创建时间的指定时间内
|
||||||
|
if(refreshDate.after(created)&&refreshDate.before(DateUtil.offsetSecond(created,time))){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user