Skip to content

Commit 231396e

Browse files
Restructure OAuth2 client auto-configuration
Previously, OAuth2 client auto-configuration was managed by a single class: - OAuth2ClientAutoConfiguration for servlet apps - ReactiveOAuth2ClientAutoConfiguration for reactive apps OAuth2ClientAutoConfiguration being for servlet apps meant that a blocking OAuth2 client was not availabile in a non-web application. The auto-configuration classes did two things: - Auto-configured beans that are specific to server-side web security that uses an OAuth2 client - Auto-configured OAuth2 client beans that may be used client- or server-side Combining these two things into a single auto-configuration class meant that you could not choose to use one or the other. For example, you may want to make use of an OAuth2 client in a web application without also using OAuth2 client-based web security. This commit restructures the auto-configuration to address these problems. There are now two auto-configurations for non-reactive apps: - OAuth2ClientAutoConfiguration - OAuth2ClientWebSecurityAutoConfiguration and two auto-configurations for reactive apps: - ReactiveOAuth2ClientAutoConfiguration - ReactiveOAuth2ClientWebSecurityAutoConfiguration This separation allows one to be used without the other. Furthermore, the conditions have been updated so that, for example, the blocking OAuth2 client is available in a non-web application. Closes gh-40997 Closes gh-44906 Co-authored-by: Moritz Halbritter <[email protected]>
1 parent c6e47d0 commit 231396e

File tree

19 files changed

+604
-411
lines changed

19 files changed

+604
-411
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/security/reactive/ReactiveManagementWebSecurityAutoConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2929
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3030
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
31-
import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration;
31+
import org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientWebSecurityAutoConfiguration;
3232
import org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration;
3333
import org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration;
3434
import org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration;
@@ -57,7 +57,7 @@
5757
*/
5858
@AutoConfiguration(before = ReactiveSecurityAutoConfiguration.class,
5959
after = { HealthEndpointAutoConfiguration.class, InfoEndpointAutoConfiguration.class,
60-
WebEndpointAutoConfiguration.class, ReactiveOAuth2ClientAutoConfiguration.class,
60+
WebEndpointAutoConfiguration.class, ReactiveOAuth2ClientWebSecurityAutoConfiguration.class,
6161
ReactiveOAuth2ResourceServerAutoConfiguration.class,
6262
ReactiveUserDetailsServiceAutoConfiguration.class })
6363
@ConditionalOnClass({ EnableWebFluxSecurity.class, WebFilterChainProxy.class })

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/security/servlet/ManagementWebSecurityAutoConfiguration.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2024 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2727
import org.springframework.boot.autoconfigure.security.ConditionalOnDefaultWebSecurity;
2828
import org.springframework.boot.autoconfigure.security.SecurityProperties;
29-
import org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration;
29+
import org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientWebSecurityAutoConfiguration;
3030
import org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration;
3131
import org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration;
3232
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
@@ -53,7 +53,7 @@
5353
*/
5454
@AutoConfiguration(before = SecurityAutoConfiguration.class,
5555
after = { HealthEndpointAutoConfiguration.class, InfoEndpointAutoConfiguration.class,
56-
WebEndpointAutoConfiguration.class, OAuth2ClientAutoConfiguration.class,
56+
WebEndpointAutoConfiguration.class, OAuth2ClientWebSecurityAutoConfiguration.class,
5757
OAuth2ResourceServerAutoConfiguration.class, Saml2RelyingPartyAutoConfiguration.class })
5858
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
5959
@ConditionalOnDefaultWebSecurity
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2012-2025 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+
* https://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+
17+
package org.springframework.boot.autoconfigure.security.oauth2.client;
18+
19+
import org.springframework.boot.autoconfigure.AutoConfiguration;
20+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
23+
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
24+
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration.NonReactiveWebApplicationCondition;
25+
import org.springframework.context.annotation.Conditional;
26+
import org.springframework.context.annotation.Import;
27+
import org.springframework.security.oauth2.client.registration.ClientRegistration;
28+
29+
/**
30+
* {@link EnableAutoConfiguration Auto-configuration} for OAuth client support.
31+
*
32+
* @author Madhura Bhave
33+
* @author Phillip Webb
34+
* @since 3.5.0
35+
*/
36+
@AutoConfiguration
37+
@Conditional(NonReactiveWebApplicationCondition.class)
38+
@ConditionalOnClass(ClientRegistration.class)
39+
@Import({ OAuth2ClientConfigurations.ClientRegistrationRepositoryConfiguration.class,
40+
OAuth2ClientConfigurations.OAuth2AuthorizedClientServiceConfiguration.class })
41+
public class OAuth2ClientAutoConfiguration {
42+
43+
static class NonReactiveWebApplicationCondition extends NoneNestedConditions {
44+
45+
NonReactiveWebApplicationCondition() {
46+
super(ConfigurationPhase.PARSE_CONFIGURATION);
47+
}
48+
49+
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
50+
static class ReactiveWebApplicationCondition {
51+
52+
}
53+
54+
}
55+
56+
}
Original file line numberDiff line numberDiff line change
@@ -14,39 +14,56 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.security.oauth2.client.servlet;
17+
package org.springframework.boot.autoconfigure.security.oauth2.client;
1818

1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2223
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
23-
import org.springframework.boot.autoconfigure.security.oauth2.client.ConditionalOnOAuth2ClientRegistrationProperties;
24-
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
25-
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper;
2624
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2725
import org.springframework.context.annotation.Bean;
2826
import org.springframework.context.annotation.Configuration;
27+
import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService;
28+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
2929
import org.springframework.security.oauth2.client.registration.ClientRegistration;
3030
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
3131
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
3232

3333
/**
34-
* {@link Configuration @Configuration} used to map {@link OAuth2ClientProperties} to
35-
* client registrations.
34+
* Configurations related to auto-configuration of OAuth2 client support.
3635
*
3736
* @author Madhura Bhave
37+
* @author Andy Wilkinson
3838
*/
39-
@Configuration(proxyBeanMethods = false)
40-
@EnableConfigurationProperties(OAuth2ClientProperties.class)
41-
@ConditionalOnOAuth2ClientRegistrationProperties
42-
class OAuth2ClientRegistrationRepositoryConfiguration {
39+
class OAuth2ClientConfigurations {
4340

44-
@Bean
41+
@Configuration(proxyBeanMethods = false)
42+
@ConditionalOnOAuth2ClientRegistrationProperties
43+
@EnableConfigurationProperties(OAuth2ClientProperties.class)
4544
@ConditionalOnMissingBean(ClientRegistrationRepository.class)
46-
InMemoryClientRegistrationRepository clientRegistrationRepository(OAuth2ClientProperties properties) {
47-
List<ClientRegistration> registrations = new ArrayList<>(
48-
new OAuth2ClientPropertiesMapper(properties).asClientRegistrations().values());
49-
return new InMemoryClientRegistrationRepository(registrations);
45+
static class ClientRegistrationRepositoryConfiguration {
46+
47+
@Bean
48+
InMemoryClientRegistrationRepository clientRegistrationRepository(OAuth2ClientProperties properties) {
49+
List<ClientRegistration> registrations = new ArrayList<>(
50+
new OAuth2ClientPropertiesMapper(properties).asClientRegistrations().values());
51+
return new InMemoryClientRegistrationRepository(registrations);
52+
}
53+
54+
}
55+
56+
@Configuration(proxyBeanMethods = false)
57+
@ConditionalOnBean(ClientRegistrationRepository.class)
58+
static class OAuth2AuthorizedClientServiceConfiguration {
59+
60+
@Bean
61+
@ConditionalOnMissingBean
62+
OAuth2AuthorizedClientService authorizedClientService(
63+
ClientRegistrationRepository clientRegistrationRepository) {
64+
return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository);
65+
}
66+
5067
}
5168

5269
}

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

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2022 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -23,12 +23,8 @@
2323
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2525
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
26-
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
27-
import org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration;
28-
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2926
import org.springframework.context.annotation.Conditional;
3027
import org.springframework.context.annotation.Import;
31-
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
3228
import org.springframework.security.oauth2.client.registration.ClientRegistration;
3329

3430
/**
@@ -38,12 +34,11 @@
3834
* @author Madhura Bhave
3935
* @since 2.1.0
4036
*/
41-
@AutoConfiguration(before = ReactiveSecurityAutoConfiguration.class)
42-
@EnableConfigurationProperties(OAuth2ClientProperties.class)
37+
@AutoConfiguration
4338
@Conditional(ReactiveOAuth2ClientAutoConfiguration.NonServletApplicationCondition.class)
44-
@ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class, ClientRegistration.class })
39+
@ConditionalOnClass({ Flux.class, ClientRegistration.class })
4540
@Import({ ReactiveOAuth2ClientConfigurations.ReactiveClientRegistrationRepositoryConfiguration.class,
46-
ReactiveOAuth2ClientConfigurations.ReactiveOAuth2ClientConfiguration.class })
41+
ReactiveOAuth2ClientConfigurations.ReactiveOAuth2AuthorizedClientServiceConfiguration.class })
4742
public class ReactiveOAuth2ClientAutoConfiguration {
4843

4944
static class NonServletApplicationCondition extends NoneNestedConditions {

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

+6-32
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,17 @@
2121

2222
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2323
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
24-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2524
import org.springframework.boot.autoconfigure.security.oauth2.client.ConditionalOnOAuth2ClientRegistrationProperties;
2625
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
2726
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper;
27+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2828
import org.springframework.context.annotation.Bean;
2929
import org.springframework.context.annotation.Configuration;
30-
import org.springframework.security.config.web.server.ServerHttpSecurity;
3130
import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
3231
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientService;
3332
import org.springframework.security.oauth2.client.registration.ClientRegistration;
3433
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository;
3534
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
36-
import org.springframework.security.oauth2.client.web.server.AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository;
37-
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
38-
import org.springframework.security.web.server.SecurityWebFilterChain;
39-
40-
import static org.springframework.security.config.Customizer.withDefaults;
4135

4236
/**
4337
* Reactive OAuth2 Client configurations.
@@ -47,12 +41,14 @@
4741
class ReactiveOAuth2ClientConfigurations {
4842

4943
@Configuration(proxyBeanMethods = false)
44+
@EnableConfigurationProperties(OAuth2ClientProperties.class)
5045
@ConditionalOnOAuth2ClientRegistrationProperties
5146
@ConditionalOnMissingBean(ReactiveClientRegistrationRepository.class)
5247
static class ReactiveClientRegistrationRepositoryConfiguration {
5348

5449
@Bean
55-
InMemoryReactiveClientRegistrationRepository clientRegistrationRepository(OAuth2ClientProperties properties) {
50+
InMemoryReactiveClientRegistrationRepository reactiveClientRegistrationRepository(
51+
OAuth2ClientProperties properties) {
5652
List<ClientRegistration> registrations = new ArrayList<>(
5753
new OAuth2ClientPropertiesMapper(properties).asClientRegistrations().values());
5854
return new InMemoryReactiveClientRegistrationRepository(registrations);
@@ -62,37 +58,15 @@ InMemoryReactiveClientRegistrationRepository clientRegistrationRepository(OAuth2
6258

6359
@Configuration(proxyBeanMethods = false)
6460
@ConditionalOnBean(ReactiveClientRegistrationRepository.class)
65-
static class ReactiveOAuth2ClientConfiguration {
61+
static class ReactiveOAuth2AuthorizedClientServiceConfiguration {
6662

6763
@Bean
6864
@ConditionalOnMissingBean
69-
ReactiveOAuth2AuthorizedClientService authorizedClientService(
65+
ReactiveOAuth2AuthorizedClientService reactiveAuthorizedClientService(
7066
ReactiveClientRegistrationRepository clientRegistrationRepository) {
7167
return new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistrationRepository);
7268
}
7369

74-
@Bean
75-
@ConditionalOnMissingBean
76-
ServerOAuth2AuthorizedClientRepository authorizedClientRepository(
77-
ReactiveOAuth2AuthorizedClientService authorizedClientService) {
78-
return new AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository(authorizedClientService);
79-
}
80-
81-
@Configuration(proxyBeanMethods = false)
82-
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
83-
static class SecurityWebFilterChainConfiguration {
84-
85-
@Bean
86-
@ConditionalOnMissingBean
87-
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
88-
http.authorizeExchange((exchange) -> exchange.anyExchange().authenticated());
89-
http.oauth2Login(withDefaults());
90-
http.oauth2Client(withDefaults());
91-
return http.build();
92-
}
93-
94-
}
95-
9670
}
9771

9872
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright 2012-2025 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+
* https://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+
17+
package org.springframework.boot.autoconfigure.security.oauth2.client.reactive;
18+
19+
import reactor.core.publisher.Flux;
20+
21+
import org.springframework.boot.autoconfigure.AutoConfiguration;
22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
26+
import org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration;
27+
import org.springframework.context.annotation.Bean;
28+
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
29+
import org.springframework.security.config.web.server.ServerHttpSecurity;
30+
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientService;
31+
import org.springframework.security.oauth2.client.web.server.AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository;
32+
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
33+
import org.springframework.security.web.server.SecurityWebFilterChain;
34+
35+
import static org.springframework.security.config.Customizer.withDefaults;
36+
37+
/**
38+
* Auto-configuration for reactive web security that uses an OAuth 2 client.
39+
*
40+
* @author Madhura Bhave
41+
* @author Phillip Webb
42+
* @author Andy Wilkinson
43+
* @since 3.5.0
44+
*/
45+
@AutoConfiguration(before = ReactiveSecurityAutoConfiguration.class,
46+
after = ReactiveOAuth2ClientAutoConfiguration.class)
47+
@ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class, ServerOAuth2AuthorizedClientRepository.class })
48+
@ConditionalOnBean(ReactiveOAuth2AuthorizedClientService.class)
49+
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
50+
public class ReactiveOAuth2ClientWebSecurityAutoConfiguration {
51+
52+
@Bean
53+
@ConditionalOnMissingBean
54+
ServerOAuth2AuthorizedClientRepository authorizedClientRepository(
55+
ReactiveOAuth2AuthorizedClientService authorizedClientService) {
56+
return new AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository(authorizedClientService);
57+
}
58+
59+
@Bean
60+
@ConditionalOnMissingBean
61+
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
62+
http.authorizeExchange((exchange) -> exchange.anyExchange().authenticated());
63+
http.oauth2Login(withDefaults());
64+
http.oauth2Client(withDefaults());
65+
return http.build();
66+
}
67+
68+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2022 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,26 +16,18 @@
1616

1717
package org.springframework.boot.autoconfigure.security.oauth2.client.servlet;
1818

19-
import org.springframework.boot.autoconfigure.AutoConfiguration;
2019
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
21-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
22-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
23-
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
24-
import org.springframework.context.annotation.Import;
25-
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
26-
import org.springframework.security.oauth2.client.registration.ClientRegistration;
2720

2821
/**
2922
* {@link EnableAutoConfiguration Auto-configuration} for OAuth client support.
3023
*
3124
* @author Madhura Bhave
3225
* @author Phillip Webb
3326
* @since 2.0.0
27+
* @deprecated since 3.5.0 for removal in 4.0.0 in favor of
28+
* {@link org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration}
3429
*/
35-
@AutoConfiguration(before = SecurityAutoConfiguration.class)
36-
@ConditionalOnClass({ EnableWebSecurity.class, ClientRegistration.class })
37-
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
38-
@Import({ OAuth2ClientRegistrationRepositoryConfiguration.class, OAuth2WebSecurityConfiguration.class })
30+
@Deprecated(since = "3.5.0", forRemoval = true)
3931
public class OAuth2ClientAutoConfiguration {
4032

4133
}

0 commit comments

Comments
 (0)