From db8242513644b246a30222663ef20e21f1e7c7ce Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: Tue, 10 Jun 2025 09:55:46 +0800
Subject: [PATCH] init
---
exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java | 58 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 47 insertions(+), 11 deletions(-)
diff --git a/exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java b/exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java
index 8cb3349..475c9ac 100644
--- a/exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java
+++ b/exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java
@@ -1,12 +1,16 @@
package com.gkhy.exam.framework.web.service;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.DigestUtil;
+import com.gkhy.exam.common.api.ResultCode;
import com.gkhy.exam.common.constant.CacheConstant;
import com.gkhy.exam.common.domain.model.LoginUser;
+import com.gkhy.exam.common.domain.model.LoginUserDetails;
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.RedisUtils;
import com.gkhy.exam.common.utils.StringUtils;
import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
@@ -38,6 +42,8 @@
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
private static final Long MILLIS_MINUTE_TEN = 20 * MILLIS_MINUTE;
+
+
@Autowired
private RedisUtils redisUtils;
@@ -101,16 +107,10 @@
* 从token中获取JWT中的负载
*/
private Claims getClaimsFromToken(String token) {
- Claims claims = null;
- try {
- claims = Jwts.parser()
+ return Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody();
- } catch (Exception e) {
- log.error("JWT格式验证失败:{}", token);
- }
- return claims;
}
/**
@@ -121,8 +121,9 @@
try {
Claims claims = getClaimsFromToken(token);
username = claims.getSubject();
- } catch (Exception e) {
- username = null;
+ } catch (ExpiredJwtException e) {
+ log.error("JWT过期:{}", token);
+ throw new ApiException(ResultCode.UNAUTHORIZED);
}
return username;
}
@@ -146,13 +147,13 @@
String tagUsername = getUserNameFromToken(token);
String username=tagUsername.substring(0,tagUsername.lastIndexOf("_"));
if(StringUtils.isBlank(username)||!username.equals(userDetails.getUsername())){
- return false;
+ throw new ApiException(ResultCode.UNAUTHORIZED);
}
String tokenKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+md5Encode(token));
String userKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+username);
String cacheToken= (String) redisUtils.get(tokenKey);
if(StringUtils.isBlank(cacheToken)||isTokenExpired(cacheToken)){
- return false;
+ throw new ApiException(ResultCode.UNAUTHORIZED);
}
if(isNeedUpdate(cacheToken)){
String newToken=createToken(tagUsername);
@@ -162,6 +163,7 @@
}
return true;
}
+
@@ -248,4 +250,38 @@
+ public void delTokenCache(HttpServletRequest request){
+ String token=getToken(request);
+ String tokenKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+md5Encode(token));
+ redisUtils.del(tokenKey);
+ String tagUsername = getUserNameFromToken(token);
+ String username=tagUsername.substring(0,tagUsername.lastIndexOf("_"));
+ if(!StringUtils.isBlank(username)){
+ String userKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+username);
+ redisUtils.del(userKey);
+ }
+ }
+
+ /**
+ * 设置用户身份信息
+ */
+ public void setLoginUser(LoginUserDetails loginUser)
+ {
+ if (ObjectUtil.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
+ {
+ refreshToken(loginUser);
+ }
+ }
+ /**
+ * 刷新令牌有效期
+ *
+ * @param loginUser 登录信息
+ */
+ public void refreshToken(LoginUserDetails loginUser)
+ {
+// loginUser.setExpireTime(loginUser.getExpireTime()+EXPIRATION);
+ // 根据uuid将loginUser缓存
+ String userKey = getTokenKey(loginUser.getToken());
+ redisUtils.set(userKey, loginUser, EXPIRATION, TimeUnit.MINUTES);
+ }
}
--
Gitblit v1.9.2