相关疑难解决方法(0)

如何从 Spring Security 的默认过滤器堆栈中删除一个过滤器?

我必须从 Spring Security 堆栈中排除一个默认过滤器。所以所有过滤器都应该像往常一样工作。似乎我找到了这样做的方法,制作自定义 FilterChainProxy:

public class CustomFilterChainProxy extends FilterChainProxy {

Logger LOGGER = Logger.getLogger(CustomFilterChainProxy.class);

public CustomFilterChainProxy() {
    super();
    LOGGER.debug("Run custom filter proxy");
    LOGGER.debug("String filters: " + this.toString());
}

public CustomFilterChainProxy(SecurityFilterChain chain) {
    super(chain);
    LOGGER.debug("Run custom filter proxy with chains");
}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它具有获取过滤器列表的构造函数,因此我将能够根据需要从链中删除一个过滤器,其余所有过滤器将照常工作。但是我不能在安全配置中为这样的构造函数创建 bean。如果我使用

<bean id="filterChainProxy" class="com.pkg.CustomFilterChainProxy">
Run Code Online (Sandbox Code Playgroud)

它,当然用默认构造函数构建对象。好的,我尝试使用一些过滤器列表制作 bean:

<bean id="filterChainProxy" class="ru.olekstra.backoffice.util.CustomFilterChainProxy">
<constructor-arg>
    <list>
        <sec:filter-chain pattern="/**" 
        filters="BasicUserApprovalFilter" />
    </list>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为 BasicUserApprovalFilter 是未知 bean。那么如何从默认过滤器堆栈中排除一个过滤器呢?如果我使用自定义过滤器链代理的方式是好的决定,那么如何使用默认过滤器链创建 bean?

java spring spring-security

5
推荐指数
1
解决办法
7532
查看次数

标签 统计

java ×1

spring ×1

spring-security ×1