Skip to content

Commit 57a266d

Browse files
committed
Fix "userDetailsPasswordService cannot be null" error
when using `ReactiveUserDetailsService` without `ReactiveUserDetailsPasswordService` fixes gh-17986 Signed-off-by: Ronny Perinke <23166289+sephiroth-j@users.noreply.github.com>
1 parent 29b9dc6 commit 57a266d

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,9 @@ private ReactiveAuthenticationManager authenticationManager() {
255255
if (this.passwordEncoder != null) {
256256
manager.setPasswordEncoder(this.passwordEncoder);
257257
}
258-
manager.setUserDetailsPasswordService(this.userDetailsPasswordService);
258+
if (this.userDetailsPasswordService != null) {
259+
manager.setUserDetailsPasswordService(this.userDetailsPasswordService);
260+
}
259261
manager.setCompromisedPasswordChecker(this.compromisedPasswordChecker);
260262
return this.postProcessor.postProcess(manager);
261263
}

config/src/test/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfigurationTests.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ void setup(ApplicationContext context) {
107107
}
108108

109109
@Test
110-
public void loadConfigWhenReactiveUserDetailsServiceConfiguredThenServerHttpSecurityExists() {
110+
public void loadConfigWhenReactiveUserDetailsAndPasswordServiceConfiguredThenServerHttpSecurityExists() {
111111
this.spring
112112
.register(ServerHttpSecurityConfiguration.class, ReactiveAuthenticationTestConfiguration.class,
113113
WebFluxSecurityConfiguration.class)
@@ -116,6 +116,16 @@ public void loadConfigWhenReactiveUserDetailsServiceConfiguredThenServerHttpSecu
116116
assertThat(serverHttpSecurity).isNotNull();
117117
}
118118

119+
@Test
120+
public void loadConfigWhenOnlyReactiveUserDetailsServiceConfiguredThenServerHttpSecurityExists() {
121+
this.spring
122+
.register(ServerHttpSecurityConfiguration.class, ReactiveUserDetailsServiceOnlyTestConfiguration.class,
123+
WebFluxSecurityConfiguration.class)
124+
.autowire();
125+
ServerHttpSecurity serverHttpSecurity = this.spring.getContext().getBean(ServerHttpSecurity.class);
126+
assertThat(serverHttpSecurity).isNotNull();
127+
}
128+
119129
@Test
120130
public void loadConfigWhenProxyingEnabledAndSubclassThenServerHttpSecurityExists() {
121131
this.spring
@@ -581,4 +591,14 @@ static Customizer<ServerHttpSecurity> httpSecurityCustomizer0() {
581591

582592
}
583593

594+
@Configuration
595+
static class ReactiveUserDetailsServiceOnlyTestConfiguration {
596+
597+
@Bean
598+
static ReactiveUserDetailsService userDetailsService() {
599+
return (username) -> Mono.just(PasswordEncodedUser.user());
600+
}
601+
602+
}
603+
584604
}

0 commit comments

Comments
 (0)