Skip to content

Commit 8600bd7

Browse files
committed
Upgrade to Spring Security 5.0.0.BUILD-SNAPSHOT
Following some changes in the latest snapshot this includes: - Some updates to oauth2 client auto-config - Security auto-config no longer relies on GlobalAuthenticationConfigurerAdapter - Remove reactive security starter Closes gh-10704
1 parent eb446d0 commit 8600bd7

File tree

19 files changed

+53
-148
lines changed

19 files changed

+53
-148
lines changed

spring-boot-project/spring-boot-autoconfigure/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -523,11 +523,6 @@
523523
<artifactId>spring-security-data</artifactId>
524524
<optional>true</optional>
525525
</dependency>
526-
<dependency>
527-
<groupId>org.springframework.security</groupId>
528-
<artifactId>spring-security-webflux</artifactId>
529-
<optional>true</optional>
530-
</dependency>
531526
<dependency>
532527
<groupId>org.springframework.security</groupId>
533528
<artifactId>spring-security-jwt-jose</artifactId>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.springframework.security.authentication.AuthenticationEventPublisher;
2828
import org.springframework.security.authentication.AuthenticationManager;
2929
import org.springframework.security.authentication.DefaultAuthenticationEventPublisher;
30-
import org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter;
30+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
3131
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
3232

3333
/**
@@ -42,7 +42,7 @@
4242
*/
4343
@Configuration
4444
@ConditionalOnClass({ AuthenticationManager.class,
45-
GlobalAuthenticationConfigurerAdapter.class })
45+
EnableWebSecurity.class })
4646
@EnableConfigurationProperties(SecurityProperties.class)
4747
@Import({ SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class,
4848
AuthenticationManagerConfiguration.class, SecurityDataConfiguration.class })

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616

1717
package org.springframework.boot.autoconfigure.security;
1818

19-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2019
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2120
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2221
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
2322
import org.springframework.context.annotation.Configuration;
2423
import org.springframework.core.annotation.Order;
2524
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
26-
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
2725
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
2826

2927
/**
@@ -36,7 +34,6 @@
3634
* @author Madhura Bhave
3735
* @since 2.0.0
3836
*/
39-
@ConditionalOnClass(EnableWebSecurity.class)
4037
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
4138
@ConditionalOnWebApplication(type = Type.SERVLET)
4239
public class SpringBootWebSecurityConfiguration {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.boot.autoconfigure.security;
1818

1919
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
20-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2120
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2221
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2322
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -34,7 +33,6 @@
3433
* @since 2.0.0
3534
*/
3635
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
37-
@ConditionalOnClass(EnableWebSecurity.class)
3836
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
3937
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
4038
@EnableWebSecurity

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private static Builder getBuilder(String registrationId, String configuredProvid
7676
throw new IllegalStateException(getErrorMessage(configuredProviderId, registrationId));
7777
}
7878
Builder builder = (provider != null ? provider.getBuilder(registrationId)
79-
: new Builder(registrationId));
79+
: ClientRegistration.withRegistrationId(registrationId));
8080
if (providers.containsKey(providerId)) {
8181
return getBuilder(builder, providers.get(providerId));
8282
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@
2727
import org.springframework.context.annotation.Bean;
2828
import org.springframework.context.annotation.Configuration;
2929
import org.springframework.security.authentication.ReactiveAuthenticationManager;
30-
import org.springframework.security.core.userdetails.MapUserDetailsRepository;
30+
import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
31+
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
3132
import org.springframework.security.core.userdetails.User;
3233
import org.springframework.security.core.userdetails.UserDetails;
33-
import org.springframework.security.core.userdetails.UserDetailsRepository;
3434

3535
/**
3636
* Default user {@link Configuration} for a reactive web application. Configures a
37-
* {@link UserDetailsRepository} with a default user and generated password. This
38-
* backs-off completely if there is a bean of type {@link UserDetailsRepository} or
37+
* {@link ReactiveUserDetailsService} with a default user and generated password. This
38+
* backs-off completely if there is a bean of type {@link ReactiveUserDetailsService} or
3939
* {@link ReactiveAuthenticationManager}.
4040
*
4141
* @author Madhura Bhave
@@ -44,19 +44,19 @@
4444
@Configuration
4545
@ConditionalOnClass({ ReactiveAuthenticationManager.class })
4646
@ConditionalOnMissingBean({ ReactiveAuthenticationManager.class,
47-
UserDetailsRepository.class })
47+
ReactiveUserDetailsService.class })
4848
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
4949
public class ReactiveAuthenticationManagerConfiguration {
5050

5151
private static final Log logger = LogFactory
5252
.getLog(ReactiveAuthenticationManagerConfiguration.class);
5353

5454
@Bean
55-
public MapUserDetailsRepository userDetailsRepository() {
55+
public MapReactiveUserDetailsService reactiveUserDetailsService() {
5656
String password = UUID.randomUUID().toString();
5757
logger.info(String.format("%n%nUsing default security password: %s%n", password));
5858
UserDetails user = User.withUsername("user").password(password).roles().build();
59-
return new MapUserDetailsRepository(user);
59+
return new MapReactiveUserDetailsService(user);
6060
}
6161

6262
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
2626
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
2727
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
28-
import org.springframework.boot.autoconfigure.security.user.SecurityConfig;
2928
import org.springframework.boot.test.context.SpringBootContextLoader;
30-
import org.springframework.context.annotation.ComponentScan;
3129
import org.springframework.context.annotation.Import;
3230
import org.springframework.test.annotation.DirtiesContext;
3331
import org.springframework.test.context.ContextConfiguration;
@@ -57,7 +55,6 @@ public static void main(String[] args) throws Exception {
5755
@Import({ EmbeddedDataSourceConfiguration.class, DataSourceAutoConfiguration.class,
5856
HibernateJpaAutoConfiguration.class,
5957
PropertyPlaceholderAutoConfiguration.class, SecurityAutoConfiguration.class })
60-
@ComponentScan(basePackageClasses = SecurityConfig.class)
6158
public static class Main {
6259

6360
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapterTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public void getClientRegistrationsWhenUsingDefinedProviderShouldAdapt()
7878
assertThat(adapted.getAuthorizationGrantType()).isEqualTo(
7979
org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE);
8080
assertThat(adapted.getRedirectUri()).isEqualTo("http://example.com/redirect");
81-
assertThat(adapted.getScope()).containsExactly("scope");
81+
assertThat(adapted.getScopes()).containsExactly("scope");
8282
assertThat(adapted.getClientName()).isEqualTo("clientName");
8383
}
8484

@@ -112,7 +112,7 @@ public void getClientRegistrationsWhenUsingCommonProviderShouldAdapt()
112112
org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE);
113113
assertThat(adapted.getRedirectUri()).isEqualTo(
114114
"{scheme}://{serverName}:{serverPort}{contextPath}/oauth2/authorize/code/{registrationId}");
115-
assertThat(adapted.getScope()).containsExactly("openid", "profile", "email",
115+
assertThat(adapted.getScopes()).containsExactly("openid", "profile", "email",
116116
"address", "phone");
117117
assertThat(adapted.getClientName()).isEqualTo("Google");
118118
}
@@ -151,7 +151,7 @@ public void getClientRegistrationsWhenUsingCommonProviderWithOverrideShouldAdapt
151151
assertThat(adapted.getAuthorizationGrantType()).isEqualTo(
152152
org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE);
153153
assertThat(adapted.getRedirectUri()).isEqualTo("http://example.com/redirect");
154-
assertThat(adapted.getScope()).containsExactly("scope");
154+
assertThat(adapted.getScopes()).containsExactly("scope");
155155
assertThat(adapted.getClientName()).isEqualTo("clientName");
156156
}
157157

@@ -196,7 +196,7 @@ public void getClientRegistrationsWhenProviderNotSpecifiedShouldUseRegistrationI
196196
org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE);
197197
assertThat(adapted.getRedirectUri()).isEqualTo(
198198
"{scheme}://{serverName}:{serverPort}{contextPath}/oauth2/authorize/code/{registrationId}");
199-
assertThat(adapted.getScope()).containsExactly("openid", "profile", "email",
199+
assertThat(adapted.getScopes()).containsExactly("openid", "profile", "email",
200200
"address", "phone");
201201
assertThat(adapted.getClientName()).isEqualTo("Google");
202202
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2WebSecurityConfigurationTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
3737
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
3838
import org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationFilter;
39-
import org.springframework.security.oauth2.client.web.AuthorizationCodeRequestRedirectFilter;
39+
import org.springframework.security.oauth2.client.web.AuthorizationRequestRedirectFilter;
4040
import org.springframework.security.oauth2.core.AuthorizationGrantType;
4141
import org.springframework.security.web.FilterChainProxy;
4242
import org.springframework.security.web.SecurityFilterChain;
@@ -97,7 +97,7 @@ private List<Filter> getAuthCodeFilters(AssertableApplicationContext context) {
9797
.getField(filterChains.get(0), "filters");
9898
List<Filter> oauth2Filters = filters.stream()
9999
.filter((f) -> f instanceof AuthorizationCodeAuthenticationFilter
100-
|| f instanceof AuthorizationCodeRequestRedirectFilter)
100+
|| f instanceof AuthorizationRequestRedirectFilter)
101101
.collect(Collectors.toList());
102102
return oauth2Filters.stream()
103103
.filter((f) -> f instanceof AuthorizationCodeAuthenticationFilter)
@@ -111,7 +111,7 @@ private boolean isEqual(ClientRegistration reg1, ClientRegistration reg2) {
111111
&& ObjectUtils.nullSafeEquals(reg1.getClientName(), reg2.getClientName());
112112
result = result && ObjectUtils.nullSafeEquals(reg1.getClientSecret(),
113113
reg2.getClientSecret());
114-
result = result && ObjectUtils.nullSafeEquals(reg1.getScope(), reg2.getScope());
114+
result = result && ObjectUtils.nullSafeEquals(reg1.getScopes(), reg2.getScopes());
115115
result = result && ObjectUtils.nullSafeEquals(reg1.getRedirectUri(),
116116
reg2.getRedirectUri());
117117
result = result && ObjectUtils.nullSafeEquals(reg1.getRegistrationId(),
@@ -154,7 +154,7 @@ public ClientRegistrationRepository clientRegistrationRepository() {
154154
}
155155

156156
private ClientRegistration getClientRegistration(String id, String userInfoUri) {
157-
ClientRegistration.Builder builder = new ClientRegistration.Builder(id);
157+
ClientRegistration.Builder builder = ClientRegistration.withRegistrationId(id);
158158
builder.clientName("foo").clientId("foo")
159159
.clientAuthenticationMethod(
160160
org.springframework.security.oauth2.core.ClientAuthenticationMethod.BASIC)

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

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@
2929
import org.springframework.context.annotation.Configuration;
3030
import org.springframework.http.server.reactive.HttpHandler;
3131
import org.springframework.security.authentication.ReactiveAuthenticationManager;
32-
import org.springframework.security.config.annotation.web.reactive.HttpSecurityConfiguration;
32+
import org.springframework.security.config.annotation.web.reactive.ServerHttpSecurityConfiguration;
3333
import org.springframework.security.config.annotation.web.reactive.WebFluxSecurityConfiguration;
3434
import org.springframework.security.core.Authentication;
35-
import org.springframework.security.core.userdetails.MapUserDetailsRepository;
35+
import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
36+
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
3637
import org.springframework.security.core.userdetails.User;
3738
import org.springframework.security.core.userdetails.UserDetails;
38-
import org.springframework.security.core.userdetails.UserDetailsRepository;
39-
import org.springframework.security.web.server.WebFilterChainFilter;
39+
import org.springframework.security.web.server.WebFilterChainProxy;
4040
import org.springframework.web.reactive.config.EnableWebFlux;
4141
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
4242

@@ -58,11 +58,11 @@ public void enablesWebFluxSecurity() {
5858
.withConfiguration(
5959
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class))
6060
.run((context) -> {
61-
assertThat(context).getBean(HttpSecurityConfiguration.class)
61+
assertThat(context).getBean(ServerHttpSecurityConfiguration.class)
6262
.isNotNull();
6363
assertThat(context).getBean(WebFluxSecurityConfiguration.class)
6464
.isNotNull();
65-
assertThat(context).getBean(WebFilterChainFilter.class).isNotNull();
65+
assertThat(context).getBean(WebFilterChainProxy.class).isNotNull();
6666
});
6767
}
6868

@@ -72,9 +72,9 @@ public void configuresADefaultUser() {
7272
.withConfiguration(
7373
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class))
7474
.run((context) -> {
75-
UserDetailsRepository userDetailsRepository = context
76-
.getBean(UserDetailsRepository.class);
77-
assertThat(userDetailsRepository.findByUsername("user").block())
75+
ReactiveUserDetailsService userDetailsService = context
76+
.getBean(ReactiveUserDetailsService.class);
77+
assertThat(userDetailsService.findByUsername("user").block())
7878
.isNotNull();
7979
});
8080
}
@@ -85,13 +85,13 @@ public void doesNotConfigureDefaultUserIfUserDetailsRepositoryAvailable() {
8585
.withConfiguration(
8686
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class))
8787
.run((context) -> {
88-
UserDetailsRepository userDetailsRepository = context
89-
.getBean(UserDetailsRepository.class);
90-
assertThat(userDetailsRepository.findByUsername("user").block())
88+
ReactiveUserDetailsService userDetailsService = context
89+
.getBean(ReactiveUserDetailsService.class);
90+
assertThat(userDetailsService.findByUsername("user").block())
9191
.isNull();
92-
assertThat(userDetailsRepository.findByUsername("foo").block())
92+
assertThat(userDetailsService.findByUsername("foo").block())
9393
.isNotNull();
94-
assertThat(userDetailsRepository.findByUsername("admin").block())
94+
assertThat(userDetailsService.findByUsername("admin").block())
9595
.isNotNull();
9696
});
9797
}
@@ -103,7 +103,7 @@ public void doesNotConfigureDefaultUserIfAuthenticationManagerAvailable() {
103103
TestConfig.class)
104104
.withConfiguration(
105105
AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class))
106-
.run((context) -> assertThat(context).getBean(UserDetailsRepository.class)
106+
.run((context) -> assertThat(context).getBean(ReactiveUserDetailsService.class)
107107
.isNull());
108108
}
109109

@@ -127,12 +127,12 @@ public ReactiveWebServerFactory reactiveWebServerFactory() {
127127
static class UserConfig {
128128

129129
@Bean
130-
public MapUserDetailsRepository userDetailsRepository() {
130+
public MapReactiveUserDetailsService userDetailsService() {
131131
UserDetails foo = User.withUsername("foo").password("foo").roles("USER")
132132
.build();
133133
UserDetails admin = User.withUsername("admin").password("admin")
134134
.roles("USER", "ADMIN").build();
135-
return new MapUserDetailsRepository(foo, admin);
135+
return new MapReactiveUserDetailsService(foo, admin);
136136
}
137137

138138
}

0 commit comments

Comments
 (0)