Bei Verwendung von WebFlux und Security mit Spring Boot 2.3.4.RELEASE In einem Test, der "@ WebMvcTest" zum Testen des Controllers usw. gibt. Als ich mit "WebTestClient" eine Anfrage an den Controller stellte, wurde ich aus irgendeinem Grund nach der Standardauthentifizierung gefragt.
Es ist ein Projekt, das Spring Security verwendet, jedoch keine Standardauthentifizierung.
Obwohl die Ursache nicht untersucht werden konnte, gab es auf GitHub ein Problem.
Zusammenfassend konfiguriert "@ WebFluxTest" Controller-bezogene "@ Bean" wie "@ Conroller", "@ ControllerAdvice" und "WebFluxConfigurer", konfiguriert jedoch nicht "@ Bean" von "@ Service".
Es scheint jedoch, dass die Klasse mit "@ Configuration" als "@ Bean" generiert wird. Und es scheint, dass nur "@ Bean", das der Bedingung entspricht, daraus generiert wird.
Wenn Sie eine Sicherheitskonfiguration für Spring Security WebFlux haben, haben Sie häufig die folgende Konfiguration, wie in der Dokumentation beschrieben.
@Configuration
@EnableWebFluxSecurity
public class SecurityConfiguration {
@Bean
public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
// do stuff
}
}
Zu diesem Zeitpunkt wird "SecurityWebFilterChain" nicht generiert, sondern "@ EnableWebFluxSecurity" wird zusammen mit "SecurityConfiguration" gescannt.
Schauen Sie sich die Definition von "@ EnableWebFluxSecurity" an, [@Import (WebFluxSecurityConfiguration.class)](https://github.com/spring-projects/spring-security/blob/651c94b3859eb6c3eee4ee632b1419e59d99dr /security/config/annotation/web/reactive/EnableWebFluxSecurity.java#L87-L88) wird zugewiesen.
WebFluxSecurityConfiguration
generiert die Standard-SecurityWebFilterChain (https://github.com/spring-projects/spring-security/blob/651c94b3859eb6c3eee4ee632b1419e59d99d8dd/config/src/main/java/org/ /web/reactive/WebFluxSecurityConfiguration.java#L100-L111).
Es scheint, dass die Standardsicherheit von Spring Security auf diese Weise auf den Test mit "@ WebFluxTest" angewendet wird.
Als Gegenmaßnahme scheint es keine andere Wahl zu geben, als explizit "@ Import" "@ Configuration" zu verwenden, wodurch "SecurityWebFilterChain" generiert wird, das im Projekt vorbereitet wurde.
Recommended Posts