#java #spring #spring-boot #security #spring-security
Вопрос:
У меня есть эта конфигурация WebSecurityConfigurerAdapter:
@EnableWebSecurity
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.cors()
.and()
.authorizeRequests()
.mvcMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer().jwt()
;
}
}
Когда я делаю запрос auth
, я получаю 401, пока не пройду какое — либо разрешение, которое не подходит для этого эндопинта.
Я бы предположил, что это как-то связано с .anyRequest().authenticated()
этим . Я уже читал раньше, что это не должно повлиять на permitAll()
s — я что-то неправильно настроил?
Комментарии:
1. У вас есть пример пути, который возвращает 401
2. Вы аннотировали свой класс конфигурации с помощью @EnableWebSecurity ?
3. @AkifHadziabdic «СООБЩЕНИЕ /авторизация/тест»
4. @Nemanja да
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
Ответ №1:
Ваш запрос, вероятно, отклоняется, потому что вы не предоставили маркер CSRF. По умолчанию Spring Security включает его для каждого POST
запроса, и вам необходимо явно отключить его.
@EnableWebSecurity
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.cors()
.and()
.csrf().disable()
.authorizeRequests()
.mvcMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer().jwt();
}
}
Вы можете добавить следующее свойство в свой application.yml
файл, чтобы вы могли видеть, почему ваш запрос отклоняется, если CSRF не соответствует действительности:
logging:
level:
org.springframework.security: TRACE
Комментарии:
1. В этом и заключалась на самом деле проблема
Ответ №2:
Если вы используете фильтр jwt,он не будет работать, даже если вы добавили PermitAll() .если вы удалите фильтр, он будет работать нормально.
Комментарии:
1. Единственный обходной путь, который я знаю, — это игнорировать HttpMethod. ОПУБЛИКОВАТЬ, поэтому все URL-адреса с использованием метода POST будут игнорироваться.
2. Вы можете взглянуть на это github.com/spring-projects/spring-security/issues/4368 Похоже, есть и другие обходные пути