|
15 | 15 | */
|
16 | 16 | package org.springframework.boot.autoconfigure.security.oauth2.client.reactive;
|
17 | 17 |
|
| 18 | +import java.util.ArrayList; |
| 19 | +import java.util.List; |
| 20 | + |
| 21 | +import reactor.core.publisher.Flux; |
| 22 | + |
18 | 23 | import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
19 | 24 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
| 25 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
20 | 26 | 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; |
22 | 31 | 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; |
23 | 35 | import org.springframework.context.annotation.Configuration;
|
24 |
| -import org.springframework.context.annotation.Import; |
25 | 36 | 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; |
26 | 39 | 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; |
27 | 44 |
|
28 | 45 | /**
|
29 | 46 | * {@link EnableAutoConfiguration Auto-configuration} for Spring Security's Reactive
|
|
34 | 51 | */
|
35 | 52 | @Configuration
|
36 | 53 | @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 }) |
41 | 56 | public class ReactiveOAuth2ClientAutoConfiguration {
|
42 | 57 |
|
| 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 | + |
43 | 92 | }
|
0 commit comments