Я сейчас борюсь с основами Spring Security.Весенняя безопасность с весенней загрузкой: разрешение доступа неавторизованного пользователя к конкретным конечным точкам при использовании фильтра
То, что я хочу достичь
Моя система только для обработки REST API, есть Войти конечная точка POST на /user/sign_in
и несколько открытых конечных точек - GET на /prompt/, /prompt/{id}, /story/, /story/{id}
, остальное все только для авторизованных пользователей.
У меня есть пользовательская аутентификация фильтр, который я поставил перед BasicAuthenticationFilter
. Я делюсь своим WebSecurityConfigurerAdapter код здесь
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DemoAuthenticationProvider demoAuthenticationProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/version", "/story", "/prompt").permitAll()
.antMatchers(HttpMethod.POST, "/user/sign_in").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new DemoAuthenticationFilter(), BasicAuthenticationFilter.class);
http.csrf().disable();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(demoAuthenticationProvider);
}
}
Для анонимного пользователя для открытых конечных точек, я возвращаю пустой маркер аутентификации в фильтре, и я получаю
403 Доступ запрещен
Зачем нужен токен аутентификации, когда я упоминал, чтобы разрешить все, а не просто аутентифицироваться для этих конечных точек? И как мне его правильно реализовать?