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