token测试

This commit is contained in:
杨晓东 2025-12-16 13:45:02 +08:00
parent cdd01d8876
commit 311b375b6e
2 changed files with 40 additions and 21 deletions

View File

@ -140,7 +140,7 @@ xss:
# Token # Token
token: token:
header: Authorization header: Authorization
expireTime: 30 expireTime: 43200
secret: abcdefghijklmnopqrstuvwxyz secret: abcdefghijklmnopqrstuvwxyz
# Swagger # Swagger

View File

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