Lors de l'utilisation de WebFlux et de la sécurité avec Spring Boot 2.3.4.RELEASE
Dans un test qui donne @ WebMvcTest
pour tester le contrôleur, etc.
Quand j'ai fait une demande au contrôleur avec WebTestClient
, on m'a demandé une authentification de base pour une raison quelconque.
C'est un projet qui utilise Spring Security, mais qui n'utilise pas l'authentification de base.
Bien que la cause n'ait pas pu être recherchée, il y avait un problème sur GitHub.
En résumé, @ WebFluxTest
configure les @ Bean liés au contrôleur tels que
@ Conroller,
@ ControllerAdvice et
WebFluxConfigurer, mais ne configure pas
@ Beande
@ Service`.
Cependant, il semble que la classe avec @ Configuration
soit générée comme @ Bean
.
Et il semble que seul @ Bean
qui correspond à la condition en soit généré.
Si vous avez une configuration de sécurité pour Spring Security WebFlux, vous aurez souvent la configuration suivante comme décrit dans la documentation.
@Configuration
@EnableWebFluxSecurity
public class SecurityConfiguration {
@Bean
public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
// do stuff
}
}
À ce stade, SecurityWebFilterChain
n'est pas généré, mais @ EnableWebFluxSecurity
est analysé avec SecurityConfiguration
.
En regardant la définition de @ EnableWebFluxSecurity
, [@Import (WebFluxSecurityConfiguration.class)](https://github.com/spring-projects/spring-security/blob/651c94b3859eb6c3eee4ee632b14rc19e59d99d8ddorking/configuration/ /security/config/annotation/web/reactive/EnableWebFluxSecurity.java#L87-L88) est attribué.
WebFluxSecurityConfiguration
générera le SecurityWebFilterChain par défaut (https://github.com/spring-projects/spring-security/blob/651c94b3859eb6c3eee4ee632b1419e59d99d8dd/config/srcame/main/java / /web/reactive/WebFluxSecurityConfiguration.java#L100-L111).
Il semble que la sécurité par défaut de Spring Security soit appliquée au test avec @ WebFluxTest
de cette manière.
En guise de contre-mesure, il semble qu'il n'y ait pas d'autre choix que de explicitement @ Importer`` @ Configuration
qui génère SecurityWebFilterChain
préparé dans le projet.
Recommended Posts