From db8242513644b246a30222663ef20e21f1e7c7ce Mon Sep 17 00:00:00 2001 From: heheng <475597332@qq.com> Date: 星期二, 10 六月 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