#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. Я провел тест и доказал, что все в порядке