mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-11-02 13:31:49 +08:00
fix 修复 由于satoken上层已经兼容 删除下层不需要的过滤器
This commit is contained in:
parent
90d2f2aea6
commit
24b6b40ade
@ -3,14 +3,12 @@ package org.dromara.common.security.config;
|
|||||||
import cn.dev33.satoken.exception.NotLoginException;
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
import cn.dev33.satoken.exception.NotPermissionException;
|
import cn.dev33.satoken.exception.NotPermissionException;
|
||||||
import cn.dev33.satoken.filter.SaServletFilter;
|
import cn.dev33.satoken.filter.SaServletFilter;
|
||||||
import cn.dev33.satoken.filter.SaTokenContextFilterForJakartaServlet;
|
|
||||||
import cn.dev33.satoken.httpauth.basic.SaHttpBasicUtil;
|
import cn.dev33.satoken.httpauth.basic.SaHttpBasicUtil;
|
||||||
import cn.dev33.satoken.interceptor.SaInterceptor;
|
import cn.dev33.satoken.interceptor.SaInterceptor;
|
||||||
import cn.dev33.satoken.router.SaRouter;
|
import cn.dev33.satoken.router.SaRouter;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.dev33.satoken.util.SaResult;
|
import cn.dev33.satoken.util.SaResult;
|
||||||
import cn.dev33.satoken.util.SaTokenConsts;
|
import cn.dev33.satoken.util.SaTokenConsts;
|
||||||
import jakarta.servlet.DispatcherType;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -25,13 +23,10 @@ import org.dromara.common.security.config.properties.SecurityProperties;
|
|||||||
import org.dromara.common.security.handler.AllUrlHandler;
|
import org.dromara.common.security.handler.AllUrlHandler;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
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.InterceptorRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,28 +45,6 @@ public class SecurityConfig implements WebMvcConfigurer {
|
|||||||
|
|
||||||
private final SecurityProperties securityProperties;
|
private final SecurityProperties securityProperties;
|
||||||
|
|
||||||
/**
|
|
||||||
* 重新注册 Sa-Token 上下文过滤器,使其覆盖 Servlet 异步分发。
|
|
||||||
* <p>
|
|
||||||
* SSE、WebSocket 握手等场景可能触发 ASYNC/ERROR dispatcher,如果上下文过滤器只处理普通 REQUEST,
|
|
||||||
* 后续统一鉴权或业务代码读取 SaHolder/StpUtil 时会出现 SaTokenContext 未初始化。
|
|
||||||
*
|
|
||||||
* @param filter Sa-Token 官方上下文过滤器
|
|
||||||
* @return 过滤器注册配置
|
|
||||||
*/
|
|
||||||
@Bean
|
|
||||||
public FilterRegistrationBean<SaTokenContextFilterForJakartaServlet> saTokenContextFilterRegistration(
|
|
||||||
SaTokenContextFilterForJakartaServlet filter) {
|
|
||||||
FilterRegistrationBean<SaTokenContextFilterForJakartaServlet> 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 路由拦截器并配置鉴权规则。
|
* 注册 Sa-Token 路由拦截器并配置鉴权规则。
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,18 +1,14 @@
|
|||||||
package org.dromara.common.security;
|
package org.dromara.common.security;
|
||||||
|
|
||||||
import cn.dev33.satoken.filter.SaTokenContextFilterForJakartaServlet;
|
|
||||||
import cn.dev33.satoken.exception.NotPermissionException;
|
import cn.dev33.satoken.exception.NotPermissionException;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import jakarta.servlet.DispatcherType;
|
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
import org.dromara.common.security.config.SecurityConfig;
|
import org.dromara.common.security.config.SecurityConfig;
|
||||||
import org.dromara.common.security.config.properties.SecurityProperties;
|
import org.dromara.common.security.config.properties.SecurityProperties;
|
||||||
import org.dromara.common.security.handler.AllUrlHandler;
|
import org.dromara.common.security.handler.AllUrlHandler;
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
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.test.util.ReflectionTestUtils;
|
||||||
import org.springframework.mock.web.MockHttpServletRequest;
|
import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
@ -32,27 +28,6 @@ import static org.mockito.Mockito.when;
|
|||||||
@DisplayName("common-security 功能单元测试")
|
@DisplayName("common-security 功能单元测试")
|
||||||
class SecurityConfigTest {
|
class SecurityConfigTest {
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证 Sa-Token 上下文过滤器覆盖请求、异步和错误分发,并保持最高优先级。
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
@DisplayName("注册 Sa-Token 上下文过滤器")
|
|
||||||
void shouldRegisterSaTokenContextFilterForAsyncDispatch() {
|
|
||||||
SecurityConfig config = new SecurityConfig(new SecurityProperties());
|
|
||||||
SaTokenContextFilterForJakartaServlet filter = mock(SaTokenContextFilterForJakartaServlet.class);
|
|
||||||
|
|
||||||
FilterRegistrationBean<SaTokenContextFilterForJakartaServlet> 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());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证安全排除路径配置可以完整保存,供拦截器注册时使用。
|
* 验证安全排除路径配置可以完整保存,供拦截器注册时使用。
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user