web.ignoring() 在存在 addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) 时不起作用

web.ignoring() is not working when addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) is present

使用 Spring 引导 2.2。4.RELEASE、spring-security-oauth2-2.3.3spring-security-web-5.2.1

我已成功设置我的 oauth2 服务器并使用 WebSecurityConfigurerAdapterResourceServerConfigurer 保护我的端点。

我遇到的问题是,当我在 ResourceServerConfigurer 中使用 addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) 时。 调用不安全的路径仍然尝试验证而不是被忽略,请求尝试通过我的 customFilter().

我确实手动设置了我所有的自定义过滤器,而不是作为 beans,所以它们不会被 spring 自动添加到过滤器链中,但我仍然遇到这种行为。 我还使用了 ("/rest/**", "/api/**") 蚂蚁匹配器,因此 customFilter() 仅在遇到这些路径时适用,但我仍然会遇到这种行为。

在服务器启动时我确实看到了这个,其目的是:

org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/unsecured2*'], []
org.springframework.security.web.DefaultSecurityFilterChain - Creating filter chain: Ant [pattern='/usecured3*'], []

我的 WebSecurityConfigurerAdapter

@EnableWebSecurity
@Configuration
@Order(1) // order 1 so it applies before ResourceServerConfigurer paths
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityRestLoginConfig extends WebSecurityConfigurerAdapter {

    //...

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/usecured*","/unsecured2*","/usecured3*");
    }
}

我的 ResourceServerConfigurer

@EnableResourceServer
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ApiSecurityResourceServerConfig implements ResourceServerConfigurer {

    //...

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.authorizeRequests().antMatchers("/rest/**", "/api/**").authenticated()
                .and()
                //..
                .addFilterBefore(customFilter(), AbstractPreAuthenticatedProcessingFilter.class) // <-- when I remove this line, web.ignoring() works, otherwise it doesn't.
                //..
    }
}

这是一个错误还是我处理错误的方式?

供参考

我将我的 web.ignoring() 代码更新为这个

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/usecured*/**","/unsecured2*/**","/usecured3*/**");
}

成功了。