From 24b6b40adea1d0ce7ba9fd218e131b9af5acaea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 24 Sep 2026 18:15:36 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=94=B1=E4=BA=8Esa?= =?UTF-8?q?token=E4=B8=8A=E5=B1=82=E5=B7=B2=E7=BB=8F=E5=85=BC=E5=AE=B9=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8B=E5=B1=82=E4=B8=8D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E8=BF=87=E6=BB=A4=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/config/SecurityConfig.java | 27 ------------------- .../common/security/SecurityConfigTest.java | 25 ----------------- 2 files changed, 52 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 663239ba4..7297b5897 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 @@ -3,14 +3,12 @@ package org.dromara.common.security.config; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.NotPermissionException; import cn.dev33.satoken.filter.SaServletFilter; -import cn.dev33.satoken.filter.SaTokenContextFilterForJakartaServlet; import cn.dev33.satoken.httpauth.basic.SaHttpBasicUtil; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaResult; import cn.dev33.satoken.util.SaTokenConsts; -import jakarta.servlet.DispatcherType; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -25,13 +23,10 @@ import org.dromara.common.security.config.properties.SecurityProperties; import org.dromara.common.security.handler.AllUrlHandler; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; -import org.springframework.core.Ordered; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import java.util.EnumSet; import java.util.List; /** @@ -50,28 +45,6 @@ public class SecurityConfig implements WebMvcConfigurer { private final SecurityProperties securityProperties; - /** - * 重新注册 Sa-Token 上下文过滤器,使其覆盖 Servlet 异步分发。 - *

- * SSE、WebSocket 握手等场景可能触发 ASYNC/ERROR dispatcher,如果上下文过滤器只处理普通 REQUEST, - * 后续统一鉴权或业务代码读取 SaHolder/StpUtil 时会出现 SaTokenContext 未初始化。 - * - * @param filter Sa-Token 官方上下文过滤器 - * @return 过滤器注册配置 - */ - @Bean - public FilterRegistrationBean saTokenContextFilterRegistration( - SaTokenContextFilterForJakartaServlet filter) { - FilterRegistrationBean registration = new FilterRegistrationBean<>(); - registration.setFilter(filter); - registration.setName("saTokenContextFilterForServlet"); - registration.addUrlPatterns("/*"); - registration.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.ERROR)); - registration.setAsyncSupported(true); - registration.setOrder(Ordered.HIGHEST_PRECEDENCE); - return registration; - } - /** * 注册 Sa-Token 路由拦截器并配置鉴权规则。 * diff --git a/ruoyi-common/ruoyi-common-security/src/test/java/org/dromara/common/security/SecurityConfigTest.java b/ruoyi-common/ruoyi-common-security/src/test/java/org/dromara/common/security/SecurityConfigTest.java index 0bb52eecc..501487a41 100644 --- a/ruoyi-common/ruoyi-common-security/src/test/java/org/dromara/common/security/SecurityConfigTest.java +++ b/ruoyi-common/ruoyi-common-security/src/test/java/org/dromara/common/security/SecurityConfigTest.java @@ -1,18 +1,14 @@ package org.dromara.common.security; -import cn.dev33.satoken.filter.SaTokenContextFilterForJakartaServlet; import cn.dev33.satoken.exception.NotPermissionException; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.extra.spring.SpringUtil; -import jakarta.servlet.DispatcherType; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.security.config.SecurityConfig; import org.dromara.common.security.config.properties.SecurityProperties; import org.dromara.common.security.handler.AllUrlHandler; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.core.Ordered; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.method.HandlerMethod; @@ -32,27 +28,6 @@ import static org.mockito.Mockito.when; @DisplayName("common-security 功能单元测试") class SecurityConfigTest { - /** - * 验证 Sa-Token 上下文过滤器覆盖请求、异步和错误分发,并保持最高优先级。 - */ - @Test - @DisplayName("注册 Sa-Token 上下文过滤器") - void shouldRegisterSaTokenContextFilterForAsyncDispatch() { - SecurityConfig config = new SecurityConfig(new SecurityProperties()); - SaTokenContextFilterForJakartaServlet filter = mock(SaTokenContextFilterForJakartaServlet.class); - - FilterRegistrationBean registration = - config.saTokenContextFilterRegistration(filter); - - assertSame(filter, registration.getFilter()); - assertEquals("saTokenContextFilterForServlet", registration.getFilterName()); - assertEquals(Set.of("/*"), registration.getUrlPatterns()); - assertEquals(Set.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.ERROR), - ReflectionTestUtils.getField(registration, "dispatcherTypes")); - assertTrue(registration.isAsyncSupported()); - assertEquals(Ordered.HIGHEST_PRECEDENCE, registration.getOrder()); - } - /** * 验证安全排除路径配置可以完整保存,供拦截器注册时使用。 */