Все исключения преобразуются в HTTP 401 на общедоступных конечных точках.
у меня проблема с Spring Boot Starter Security V3.0.0
Для этой конфигурации:
@Bean
public SecurityFilterChain filterChain( final HttpSecurity http ) throws Exception {
http
.cors().and().csrf().disable()
.sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS )
.and()
.anonymous()
.and()
.authorizeHttpRequests()
.requestMatchers( HttpMethod.OPTIONS ).permitAll()
.requestMatchers( "/system/**" ).hasRole( new SecurityRole( Role.ROLE_SYSTEM ).toString() )
.requestMatchers( "/admin/**" ).hasRole( new SecurityRole( Role.ROLE_AUTH_ADMIN ).toString() )
.requestMatchers( "/identity/**" ).hasRole( new SecurityRole( Role.ROLE_AUTH_IDENTITY ).toString() )
.requestMatchers( "/guest/**" ).permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer( OAuth2ResourceServerConfigurer::jwt );
return http.build();
}
Все исключения, созданные конечной точкой «/guest/**», преобразуются в HTTP 401 без тела. Даже когда я выдаю HTTP 409 с этим классом:
@ResponseStatus( code = HttpStatus.CONFLICT )
public class HttpConflictException extends RuntimeException {
public HttpConflictException( String message ) {
super( message );
}
}
ВАЖНО: если исключение не выдается, запрос работает
Если эта линия
.requestMatchers( "/guest/**" ).permitAll()
заменяется этим
.requestMatchers( "/**" ).permitAll()
оно работает. Но этот вариант кажется слишком опасным. Я что-то не понимаю? Я не видел в документации ничего, что могло бы помочь с этой проблемой.
Зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
Спасибо.