我必须从 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");
}
}
如您所见,它具有获取过滤器列表的构造函数,因此我将能够根据需要从链中删除一个过滤器,其余的将照常工作。但是我不能为这样的构造函数在安全配置中制作 bean。如果我使用
<bean id="filterChainProxy" class="com.pkg.CustomFilterChainProxy">
它当然是使用默认构造函数构建对象。好的,我尝试使用一些过滤器列表制作 bean:
<bean id="filterChainProxy" class="ru.olekstra.backoffice.util.CustomFilterChainProxy">
<constructor-arg>
<list>
<sec:filter-chain pattern="/**"
filters="BasicUserApprovalFilter" />
</list>
</constructor-arg>
</bean>
但这不会编译,因为 BasicUserApprovalFilter 是未知 bean。那么如何从默认过滤器堆栈中排除一个过滤器呢?如果我使用自定义过滤器链代理的方式是一个不错的决定,那么如何使用默认过滤器链创建 bean?