From f0f00e9ba8a755e4317e029d73b69a92ad9f9df1 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期六, 14 九月 2024 17:02:41 +0800
Subject: [PATCH] update

---
 exam-framework/src/main/java/com/gkhy/exam/framework/web/service/TokenService.java |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 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..4a34050 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,14 @@
 package com.gkhy.exam.framework.web.service;
 
 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.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;
@@ -101,16 +103,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 +117,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 +143,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 +159,7 @@
         }
         return true;
     }
+
 
 
 
@@ -248,4 +246,17 @@
 
 
 
+    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);
+        }
+    }
+
+
 }

--
Gitblit v1.9.2