Skip to content

Commit 968a637

Browse files
committed
Refactor ReactiveOAuth2ClientAutoConfiguration for non webapps
Non web applications might want to leverage `ReactiveClientRegistrationRepository` and `ServerOAuth2AuthorizedClientRepository` to configure `WebClient`. Closes gh-14350
1 parent 5bb3eed commit 968a637

File tree

6 files changed

+200
-329
lines changed

6 files changed

+200
-329
lines changed

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

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,32 @@
1515
*/
1616
package org.springframework.boot.autoconfigure.security.oauth2.client.reactive;
1717

18+
import java.util.ArrayList;
19+
import java.util.List;
20+
21+
import reactor.core.publisher.Flux;
22+
1823
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
1924
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2026
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
21-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
28+
import org.springframework.boot.autoconfigure.security.oauth2.client.ClientsConfiguredCondition;
29+
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
30+
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter;
2231
import org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration;
32+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
33+
import org.springframework.context.annotation.Bean;
34+
import org.springframework.context.annotation.Conditional;
2335
import org.springframework.context.annotation.Configuration;
24-
import org.springframework.context.annotation.Import;
2536
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
37+
import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
38+
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientService;
2639
import org.springframework.security.oauth2.client.registration.ClientRegistration;
40+
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository;
41+
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
42+
import org.springframework.security.oauth2.client.web.server.AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository;
43+
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
2744

2845
/**
2946
* {@link EnableAutoConfiguration Auto-configuration} for Spring Security's Reactive
@@ -34,10 +51,42 @@
3451
*/
3552
@Configuration
3653
@AutoConfigureBefore(ReactiveSecurityAutoConfiguration.class)
37-
@ConditionalOnClass({ EnableWebFluxSecurity.class, ClientRegistration.class })
38-
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
39-
@Import({ ReactiveOAuth2ClientRegistrationRepositoryConfiguration.class,
40-
ReactiveOAuth2WebSecurityConfiguration.class })
54+
@EnableConfigurationProperties(OAuth2ClientProperties.class)
55+
@ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class, ClientRegistration.class })
4156
public class ReactiveOAuth2ClientAutoConfiguration {
4257

58+
private final OAuth2ClientProperties properties;
59+
60+
public ReactiveOAuth2ClientAutoConfiguration(OAuth2ClientProperties properties) {
61+
this.properties = properties;
62+
}
63+
64+
@Bean
65+
@Conditional(ClientsConfiguredCondition.class)
66+
@ConditionalOnMissingBean(ReactiveClientRegistrationRepository.class)
67+
public InMemoryReactiveClientRegistrationRepository clientRegistrationRepository() {
68+
List<ClientRegistration> registrations = new ArrayList<>(
69+
OAuth2ClientPropertiesRegistrationAdapter
70+
.getClientRegistrations(this.properties).values());
71+
return new InMemoryReactiveClientRegistrationRepository(registrations);
72+
}
73+
74+
@Bean
75+
@ConditionalOnBean(ReactiveClientRegistrationRepository.class)
76+
@ConditionalOnMissingBean
77+
public ReactiveOAuth2AuthorizedClientService authorizedClientService(
78+
ReactiveClientRegistrationRepository clientRegistrationRepository) {
79+
return new InMemoryReactiveOAuth2AuthorizedClientService(
80+
clientRegistrationRepository);
81+
}
82+
83+
@Bean
84+
@ConditionalOnBean(ReactiveOAuth2AuthorizedClientService.class)
85+
@ConditionalOnMissingBean
86+
public ServerOAuth2AuthorizedClientRepository authorizedClientRepository(
87+
ReactiveOAuth2AuthorizedClientService authorizedClientService) {
88+
return new AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository(
89+
authorizedClientService);
90+
}
91+
4392
}

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

Lines changed: 0 additions & 60 deletions
This file was deleted.

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

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)