Исключить выполнение запросов на URL-адрес через фильтры безопасности Spring

#java #spring #spring-security

#java #spring #spring-безопасность

Вопрос:

У меня есть приложение Spring boot и пользовательский фильтр аутентификации. Приложение имеет 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);

    }
  

Это то, что у меня есть до сих пор, но по какой-то причине, когда я перехожу к «/», я все равно нажимаю на свой пользовательский фильтр.

Ответ №1:

Ниже приведено решение. Суть в том, что вы должны определить два WebSecurityConfigurerAdapter с разным порядком. Пожалуйста, попробуйте. решение

Приведенный ниже код скопирован оттуда.

 @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);
    }
}
  

Комментарии:

1. Я провел тест и доказал, что все в порядке