Bladeren bron

各微服务使用拦截器设置用户信息上下文

tangyishan 1 maand geleden
bovenliggende
commit
0e8eb24729

+ 20 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/config/AuthInterceptorConfig.java

@@ -0,0 +1,20 @@
+package com.sckw.core.config;
+
+import com.sckw.core.interceptor.AuthenticationInterceptor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * 认证拦截器配置
+ */
+@ConditionalOnClass(WebMvcConfigurer.class)
+@Configuration
+public class AuthInterceptorConfig implements WebMvcConfigurer {
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        // 注册自定义拦截器实例,并指定拦截的路径模式
+        registry.addInterceptor(new AuthenticationInterceptor()).addPathPatterns("/**"); // 可以排除某些路径不被拦截
+    }
+}

+ 11 - 18
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java → sckw-common/sckw-common-core/src/main/java/com/sckw/core/interceptor/AuthenticationInterceptor.java

@@ -1,4 +1,4 @@
-package com.sckw.core.filter;
+package com.sckw.core.interceptor;
 
 import com.alibaba.fastjson2.JSON;
 import com.sckw.core.model.constant.Global;
@@ -7,28 +7,21 @@ import com.sckw.core.web.context.LoginEntHolder;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.model.LoginEntInfo;
 import com.sckw.core.web.model.LoginUserInfo;
-import jakarta.servlet.*;
 import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.Ordered;
+import org.springframework.web.servlet.HandlerInterceptor;
 
-import java.io.IOException;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 
 /**
- * @desc: 登录过滤
- * @author: czh
- * @date: 2023/6/14
+ * 登录认证拦截器,用于从请求头中获取登录用户信息并设置到上下文中
  */
 @Slf4j
-public class RequestCheckFilter implements Filter, Ordered {
-
-
+public class AuthenticationInterceptor implements HandlerInterceptor {
     @Override
-    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
-                         FilterChain filterChain) throws IOException, ServletException {
-        HttpServletRequest request = (HttpServletRequest) servletRequest;
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         String userInfoStrEncode = request.getHeader(Global.USER_INFO_STR_ENCODE);
         String entInfoStrEncode = request.getHeader(Global.ENT_INFO_STR_ENCODE);
         LoginUserInfo loginUserInfo = null;
@@ -43,13 +36,13 @@ public class RequestCheckFilter implements Filter, Ordered {
         }
         LoginUserHolder.set(loginUserInfo);
         LoginEntHolder.set(loginEntInfo);
-        filterChain.doFilter(servletRequest, servletResponse);
-        LoginUserHolder.remove();
-        LoginEntHolder.remove();
+        return true;
     }
 
     @Override
-    public int getOrder() {
-        return -1;
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        //清理用户和企业上下文线程变量
+        LoginUserHolder.remove();
+        LoginEntHolder.remove();
     }
 }

+ 1 - 1
sckw-common/sckw-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -3,7 +3,7 @@ com.sckw.core.aspect.NoRepeatSubmitAspect
 com.sckw.core.exception.GlobalSystemExceptionHandler
 com.sckw.core.web.config.CustomConfig
 #com.sckw.core.filter.LoginFilter
-com.sckw.core.filter.RequestCheckFilter
+com.sckw.core.config.AuthInterceptorConfig
 com.sckw.core.config.MybatisPlusConfig
 com.sckw.core.config.JacksonConfig
 com.sckw.core.filter.ExceptionFilterConfig