From 4ceb79afa35b2be369b8c84219524d687451974b Mon Sep 17 00:00:00 2001
From: MichelleChung <1242874891@qq.com>
Date: 星期五, 29 十二月 2023 11:39:15 +0800
Subject: [PATCH] !467 新增 ThreadLocalHolder 整合 SaHolder,ThreadLocal * fix 修复 issue#I8RWB5 字段缺少问题 ; * add 新增 ThreadLocalHolder 替换 SaHolder ;

---
 ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java |   64 +++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java b/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java
index 63d7eb1..ace0668 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java
@@ -4,10 +4,13 @@
 import cn.dev33.satoken.interceptor.SaInterceptor;
 import cn.dev33.satoken.router.SaRouter;
 import cn.dev33.satoken.stp.StpUtil;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import org.dromara.common.core.utils.ServletUtils;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.core.context.ThreadLocalHolder;
 import org.dromara.common.security.config.properties.SecurityProperties;
 import org.dromara.common.security.handler.AllUrlHandler;
 import lombok.RequiredArgsConstructor;
@@ -38,35 +41,44 @@
     public void addInterceptors(InterceptorRegistry registry) {
         // 娉ㄥ唽璺敱鎷︽埅鍣紝鑷畾涔夐獙璇佽鍒�
         registry.addInterceptor(new SaInterceptor(handler -> {
-            AllUrlHandler allUrlHandler = SpringUtils.getBean(AllUrlHandler.class);
-            // 鐧诲綍楠岃瘉 -- 鎺掗櫎澶氫釜璺緞
-            SaRouter
-                // 鑾峰彇鎵�鏈夌殑
-                .match(allUrlHandler.getUrls())
-                // 瀵规湭鎺掗櫎鐨勮矾寰勮繘琛屾鏌�
-                .check(() -> {
-                    // 妫�鏌ユ槸鍚︾櫥褰� 鏄惁鏈塼oken
-                    StpUtil.checkLogin();
+                AllUrlHandler allUrlHandler = SpringUtils.getBean(AllUrlHandler.class);
+                // 鐧诲綍楠岃瘉 -- 鎺掗櫎澶氫釜璺緞
+                SaRouter
+                    // 鑾峰彇鎵�鏈夌殑
+                    .match(allUrlHandler.getUrls())
+                    // 瀵规湭鎺掗櫎鐨勮矾寰勮繘琛屾鏌�
+                    .check(() -> {
+                        // 妫�鏌ユ槸鍚︾櫥褰� 鏄惁鏈塼oken
+                        StpUtil.checkLogin();
 
-                    // 妫�鏌� header 涓� param 閲岀殑 clientid 涓� token 閲岀殑鏄惁涓�鑷�
-                    String headerCid = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY);
-                    String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY);
-                    String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString();
-                    if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) {
-                        // token 鏃犳晥
-                        throw NotLoginException.newInstance(StpUtil.getLoginType(),
-                            "-100", "瀹㈡埛绔疘D涓嶵oken涓嶅尮閰�",
-                            StpUtil.getTokenValue());
-                    }
+                        // 妫�鏌� header 涓� param 閲岀殑 clientid 涓� token 閲岀殑鏄惁涓�鑷�
+                        String headerCid = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY);
+                        String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY);
+                        String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString();
+                        if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) {
+                            // token 鏃犳晥
+                            throw NotLoginException.newInstance(StpUtil.getLoginType(),
+                                "-100", "瀹㈡埛绔疘D涓嶵oken涓嶅尮閰�",
+                                StpUtil.getTokenValue());
+                        }
 
-                    // 鏈夋晥鐜囧奖鍝� 鐢ㄤ簬涓存椂娴嬭瘯
-                    // if (log.isDebugEnabled()) {
-                    //     log.info("鍓╀綑鏈夋晥鏃堕棿: {}", StpUtil.getTokenTimeout());
-                    //     log.info("涓存椂鏈夋晥鏃堕棿: {}", StpUtil.getTokenActivityTimeout());
-                    // }
+                        // 淇濆瓨鐢ㄦ埛淇℃伅
+                        ThreadLocalHolder.set(LoginHelper.LOGIN_USER_KEY, LoginHelper.getLoginUser());
 
-                });
-        })).addPathPatterns("/**")
+                        // 鏈夋晥鐜囧奖鍝� 鐢ㄤ簬涓存椂娴嬭瘯
+                        // if (log.isDebugEnabled()) {
+                        //     log.info("鍓╀綑鏈夋晥鏃堕棿: {}", StpUtil.getTokenTimeout());
+                        //     log.info("涓存椂鏈夋晥鏃堕棿: {}", StpUtil.getTokenActivityTimeout());
+                        // }
+
+                    });
+            })
+            {
+                @Override
+                public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+                    ThreadLocalHolder.remove(LoginHelper.LOGIN_USER_KEY);
+                }
+            }).addPathPatterns("/**")
             // 鎺掗櫎涓嶉渶瑕佹嫤鎴殑璺緞
             .excludePathPatterns(securityProperties.getExcludes());
     }

--
Gitblit v1.9.3