Java 通过Spring安全筛选器排除对URL的请求

Java 通过Spring安全筛选器排除对URL的请求,java,spring,spring-security,Java,Spring,Spring Security,我有一个Spring启动应用程序和一个自定义身份验证过滤器。应用程序有一个URL“/”,我希望避免运行任何Spring安全过滤器(包括身份验证和授权),包括我的自定义过滤器 我不想将WebSecurity配置为忽略此URL,因为我还想应用其他一些Spring安全功能,我的理解是使用: webSecurityBuilder.ignoring().antMatchers("/"); 将阻止所有Spring安全功能在此URL上运行 有没有办法使用HttpSecurity来实现这一

我有一个Spring启动应用程序和一个自定义身份验证过滤器。应用程序有一个URL“/”,我希望避免运行任何Spring安全过滤器(包括身份验证和授权),包括我的自定义过滤器

我不想将
WebSecurity
配置为忽略此URL,因为我还想应用其他一些Spring安全功能,我的理解是使用:

webSecurityBuilder.ignoring().antMatchers("/");
将阻止所有Spring安全功能在此URL上运行

有没有办法使用HttpSecurity来实现这一点

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationFilter customAuthFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        
http.antMatcher("/").
                anonymous().and().authorizeRequests()
                .antMatchers("/", "/index.html").permitAll()
                .anyRequest().authenticated();

        http.addFilterBefore(customAuthFilter, UsernamePasswordAuthenticationFilter.class);

    }

这就是我到目前为止所拥有的,但由于某种原因,当我导航到“/”时,我仍然会点击我的自定义过滤器。

以下是解决方案。摘要是您应该定义两个顺序不同的WebSecurity配置适配器。请试一试。

下面的代码是从那里复制的

@Configuration
@Order(1)
public class OnlyHeadersConfig extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) {
        http
            .antMatchers("/special/endpoints/**")
                .authorizeRequests((authz) -> authz.anyRequest().permitAll())
                .anonymous();
    }
}

@Configuration
@Order(2)
public class MainSecurityConfig extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) {
        http
            .authorizeRequests(authz -> authz.anyRequest().authenticated())
            .addFilterAt(new MyCustomFilter(), UsernamePasswordAuthenticationFilter.class);
    }
}

我做了一个测试,证明它是正确的