Skip to content

Commit 66b55de

Browse files
committed
Adapt to password encoder changes in Spring Security
Closes gh-10762
1 parent 35c6b83 commit 66b55de

File tree

17 files changed

+100
-59
lines changed

17 files changed

+100
-59
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.commons.logging.Log;
2222
import org.apache.commons.logging.LogFactory;
2323

24+
import org.springframework.beans.factory.ObjectProvider;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2627
import org.springframework.context.annotation.Bean;
@@ -31,6 +32,8 @@
3132
import org.springframework.security.config.annotation.ObjectPostProcessor;
3233
import org.springframework.security.core.userdetails.User;
3334
import org.springframework.security.core.userdetails.UserDetailsService;
35+
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
36+
import org.springframework.security.crypto.password.PasswordEncoder;
3437
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
3538

3639
/**
@@ -54,11 +57,15 @@ public class AuthenticationManagerConfiguration {
5457
.getLog(AuthenticationManagerConfiguration.class);
5558

5659
@Bean
57-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
60+
public InMemoryUserDetailsManager inMemoryUserDetailsManager(
61+
ObjectProvider<PasswordEncoder> passwordEncoder) throws Exception {
5862
String password = UUID.randomUUID().toString();
5963
logger.info(String.format("%n%nUsing default security password: %s%n", password));
64+
String encodedPassword = passwordEncoder
65+
.getIfAvailable(PasswordEncoderFactories::createDelegatingPasswordEncoder)
66+
.encode(password);
6067
return new InMemoryUserDetailsManager(
61-
User.withUsername("user").password(password).roles().build());
68+
User.withUsername("user").password(encodedPassword).roles().build());
6269
}
6370

6471
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/reactive/ReactiveAuthenticationManagerConfiguration.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.commons.logging.Log;
2222
import org.apache.commons.logging.LogFactory;
2323

24+
import org.springframework.beans.factory.ObjectProvider;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@@ -31,6 +32,8 @@
3132
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
3233
import org.springframework.security.core.userdetails.User;
3334
import org.springframework.security.core.userdetails.UserDetails;
35+
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
36+
import org.springframework.security.crypto.password.PasswordEncoder;
3437

3538
/**
3639
* Default user {@link Configuration} for a reactive web application. Configures a
@@ -52,10 +55,15 @@ public class ReactiveAuthenticationManagerConfiguration {
5255
.getLog(ReactiveAuthenticationManagerConfiguration.class);
5356

5457
@Bean
55-
public MapReactiveUserDetailsService reactiveUserDetailsService() {
58+
public MapReactiveUserDetailsService reactiveUserDetailsService(
59+
ObjectProvider<PasswordEncoder> passwordEncoder) {
5660
String password = UUID.randomUUID().toString();
5761
logger.info(String.format("%n%nUsing default security password: %s%n", password));
58-
UserDetails user = User.withUsername("user").password(password).roles().build();
62+
String encodedPassword = passwordEncoder
63+
.getIfAvailable(PasswordEncoderFactories::createDelegatingPasswordEncoder)
64+
.encode(password);
65+
UserDetails user = User.withUsername("user").password(encodedPassword).roles()
66+
.build();
5967
return new MapReactiveUserDetailsService(user);
6068
}
6169

spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/security/SecurityTestApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
public class SecurityTestApplication {
3535

3636
@Bean
37-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
38-
return new InMemoryUserDetailsManager(
39-
User.withUsername("user").password("secret").roles("USER").build());
37+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
38+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
39+
.username("user").password("secret").roles("USER").build());
4040
}
4141

4242
@RestController

spring-boot-samples/spring-boot-sample-actuator-custom-security/src/main/java/sample/actuator/customsecurity/SecurityConfiguration.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
1+
/*
2+
* Copyright 2012-2017 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
package sample.actuator.customsecurity;
218

319
import org.springframework.boot.actuate.autoconfigure.security.EndpointRequest;
420
import org.springframework.boot.autoconfigure.security.StaticResourceRequest;
21+
import org.springframework.context.annotation.Bean;
522
import org.springframework.context.annotation.Configuration;
6-
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
723
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
824
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
25+
import org.springframework.security.core.userdetails.User;
26+
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
927

1028
@Configuration
1129
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
1230

13-
@Override
14-
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
15-
auth.inMemoryAuthentication().withUser("user").password("password")
16-
.authorities("ROLE_USER").and().withUser("admin").password("admin")
17-
.authorities("ROLE_ACTUATOR", "ROLE_USER");
31+
@Bean
32+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
33+
return new InMemoryUserDetailsManager(
34+
User.withDefaultPasswordEncoder().username("user").password("password")
35+
.authorities("ROLE_USER").build(),
36+
User.withDefaultPasswordEncoder().username("admin").password("admin")
37+
.authorities("ROLE_ACTUATOR", "ROLE_USER").build());
1838
}
1939

2040
@Override

spring-boot-samples/spring-boot-sample-actuator-log4j2/src/main/java/sample/actuator/log4j2/SampleActuatorLog4J2Application.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
public class SampleActuatorLog4J2Application {
2727

2828
@Bean
29-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
30-
return new InMemoryUserDetailsManager(
31-
User.withUsername("user").password("password").roles("USER").build());
29+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
30+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
31+
.username("user").password("password").roles("USER").build());
3232
}
3333

3434
public static void main(String[] args) throws Exception {

spring-boot-samples/spring-boot-sample-actuator-ui/src/main/java/sample/actuator/ui/SampleActuatorUiApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
public class SampleActuatorUiApplication {
3434

3535
@Bean
36-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
37-
return new InMemoryUserDetailsManager(
38-
User.withUsername("user").password("password").roles("USER").build());
36+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
37+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
38+
.username("user").password("password").roles("USER").build());
3939
}
4040

4141
@GetMapping("/")

spring-boot-samples/spring-boot-sample-actuator/src/main/java/sample/actuator/SampleActuatorApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ public static void main(String[] args) throws Exception {
3434
}
3535

3636
@Bean
37-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
38-
return new InMemoryUserDetailsManager(
39-
User.withUsername("user").password("password").roles("USER").build());
37+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
38+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
39+
.username("user").password("password").roles("USER").build());
4040
}
4141

4242
@Bean

spring-boot-samples/spring-boot-sample-secure-webflux/src/main/java/sample/secure/webflux/SampleSecureWebFluxApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public RouterFunction<ServerResponse> monoRouterFunction(EchoHandler echoHandler
4242

4343
@Bean
4444
public ReactiveUserDetailsService userDetailsRepository() {
45-
return new MapReactiveUserDetailsService(
46-
User.withUsername("foo").password("password").roles("USER").build());
45+
return new MapReactiveUserDetailsService(User.withDefaultPasswordEncoder()
46+
.username("foo").password("password").roles("USER").build());
4747
}
4848

4949
}

spring-boot-samples/spring-boot-sample-secure/src/main/java/sample/secure/SampleSecureApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public class SampleSecureApplication implements CommandLineRunner {
3838
private SampleService service;
3939

4040
@Bean
41-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
42-
return new InMemoryUserDetailsManager(
43-
User.withUsername("user").password("password").roles("USER").build());
41+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
42+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
43+
.username("user").password("password").roles("USER").build());
4444
}
4545

4646
@Override

spring-boot-samples/spring-boot-sample-servlet/src/main/java/sample/servlet/SampleServletApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
public class SampleServletApplication extends SpringBootServletInitializer {
3939

4040
@Bean
41-
public InMemoryUserDetailsManager inMemoryUserDetailsManager() throws Exception {
42-
return new InMemoryUserDetailsManager(
43-
User.withUsername("user").password("password").roles("USER").build());
41+
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
42+
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
43+
.username("user").password("password").roles("USER").build());
4444
}
4545

4646
@SuppressWarnings("serial")

0 commit comments

Comments
 (0)