首页 > 解决方案 > 每个 url 的 Spring Security 过滤器顺序

问题描述

我有两个过滤器来处理我的 httpRequest 并添加标题和数据。

我想以特定的执行顺序应用我的过滤器。所以我试过了:

@Component
@Order(1)
public class FirstFilter implements Filter { //**** }

@Component
@Order(2)
public class SecondFilter implements Filter { //**** }

这工作正常。但是,我只想将此顺序应用于以 (/api) 开头的请求,而不是应用于所有请求。所以 @Order 注释没有做我想做的事情。

我试过了 :

@Override
protected void configure(HttpSecurity http) throws Exception {

http

        .antMatcher("/api/**")
        .addFilterAfter(new FirstFilter (), ChannelProcessingFilter.class)
        .addFilterAfter(new SecondtFilter (), FirstFilter .class)

这也有效,但我不想在 ChannelProcessingFilter 之后添加我的过滤器 .. 这会使我的过滤器处理两次请求!而且不止一次!

任何想法 ?

标签: javaspring-securityfilter

解决方案


阅读问题详细信息,这正是您要问的。它读出

Spring Security 不会在它创建的 Filter bean 上设置顺序。这意味着,当 Boot 为其创建 FilterRegistrationBean 时,它会获得默认顺序,即 LOWEST_PRECEDENCE。

如果您希望自己的过滤器跟随 Spring Security,您可以为 Spring Security 的过滤器创建自己的注册并指定顺序。


推荐阅读