token测试
This commit is contained in:
parent
cdd01d8876
commit
311b375b6e
@ -140,7 +140,7 @@ xss:
|
||||
# Token
|
||||
token:
|
||||
header: Authorization
|
||||
expireTime: 30
|
||||
expireTime: 43200
|
||||
secret: abcdefghijklmnopqrstuvwxyz
|
||||
|
||||
# Swagger
|
||||
|
||||
@ -20,12 +20,13 @@ import com.shgx.common.utils.ip.IpUtils;
|
||||
import com.shgx.common.utils.uuid.IdUtils;
|
||||
import eu.bitwalker.useragentutils.UserAgent;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.ExpiredJwtException;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
|
||||
/**
|
||||
* token验证处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Component
|
||||
@ -56,7 +57,7 @@ public class TokenService
|
||||
|
||||
/**
|
||||
* 获取用户身份信息
|
||||
*
|
||||
*
|
||||
* @return 用户信息
|
||||
*/
|
||||
public LoginUser getLoginUser(HttpServletRequest request)
|
||||
@ -72,6 +73,10 @@ public class TokenService
|
||||
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
|
||||
String userKey = getTokenKey(uuid);
|
||||
LoginUser user = redisCache.getCacheObject(userKey);
|
||||
// 注释:取消Token过期校验(原代码无校验,此处兜底)
|
||||
// if (user != null) {
|
||||
// verifyToken(user);
|
||||
// }
|
||||
return user;
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -107,7 +112,7 @@ public class TokenService
|
||||
|
||||
/**
|
||||
* 创建令牌
|
||||
*
|
||||
*
|
||||
* @param loginUser 用户信息
|
||||
* @return 令牌
|
||||
*/
|
||||
@ -126,37 +131,43 @@ public class TokenService
|
||||
|
||||
/**
|
||||
* 验证令牌有效期,相差不足20分钟,自动刷新缓存
|
||||
*
|
||||
*
|
||||
* @param loginUser 登录信息
|
||||
* @return 令牌
|
||||
*/
|
||||
public void verifyToken(LoginUser loginUser)
|
||||
{
|
||||
long expireTime = loginUser.getExpireTime();
|
||||
long currentTime = System.currentTimeMillis();
|
||||
if (expireTime - currentTime <= MILLIS_MINUTE_TWENTY)
|
||||
{
|
||||
refreshToken(loginUser);
|
||||
}
|
||||
// ========== 核心修改1:注释所有续期/过期校验逻辑 ==========
|
||||
// long expireTime = loginUser.getExpireTime();
|
||||
// long currentTime = System.currentTimeMillis();
|
||||
// if (expireTime - currentTime <= MILLIS_MINUTE_TWENTY)
|
||||
// {
|
||||
// refreshToken(loginUser);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新令牌有效期
|
||||
*
|
||||
*
|
||||
* @param loginUser 登录信息
|
||||
*/
|
||||
public void refreshToken(LoginUser loginUser)
|
||||
{
|
||||
loginUser.setLoginTime(System.currentTimeMillis());
|
||||
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
|
||||
// 根据uuid将loginUser缓存
|
||||
// ========== 核心修改2:可选 - 强制永久有效(忽略配置的expireTime) ==========
|
||||
// 若想按配置的expireTime(如30天)过期,保留下面这行;若想永久,注释这行
|
||||
// loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
|
||||
|
||||
// ========== 核心修改3:Redis存储取消过期时间(永久存储) ==========
|
||||
String userKey = getTokenKey(loginUser.getToken());
|
||||
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
|
||||
// 原代码:redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
|
||||
// 修改后:永久存储
|
||||
redisCache.setCacheObject(userKey, loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置用户代理信息
|
||||
*
|
||||
*
|
||||
* @param loginUser 登录信息
|
||||
*/
|
||||
public void setUserAgent(LoginUser loginUser)
|
||||
@ -179,6 +190,8 @@ public class TokenService
|
||||
{
|
||||
String token = Jwts.builder()
|
||||
.setClaims(claims)
|
||||
// ========== 核心修改4:JWT不设置过期时间(原代码已无,此处确认) ==========
|
||||
// .setExpiration(new Date(System.currentTimeMillis() + expireTime * MILLIS_MINUTE))
|
||||
.signWith(SignatureAlgorithm.HS512, secret).compact();
|
||||
return token;
|
||||
}
|
||||
@ -191,10 +204,16 @@ public class TokenService
|
||||
*/
|
||||
private Claims parseToken(String token)
|
||||
{
|
||||
return Jwts.parser()
|
||||
.setSigningKey(secret)
|
||||
.parseClaimsJws(token)
|
||||
.getBody();
|
||||
try {
|
||||
return Jwts.parser()
|
||||
.setSigningKey(secret)
|
||||
.parseClaimsJws(token)
|
||||
.getBody();
|
||||
} catch (ExpiredJwtException e) {
|
||||
// ========== 核心修改5:捕获JWT过期异常,强制返回claims ==========
|
||||
log.warn("Token已过有效期,但强制放行: {}", e.getMessage());
|
||||
return e.getClaims();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -229,4 +248,4 @@ public class TokenService
|
||||
{
|
||||
return CacheConstants.LOGIN_TOKEN_KEY + uuid;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user