ConditionalOnMissingBean for ReactiveOAuth2AuthorizedClientManager

This commit is contained in:
Henning Poettker
2021-10-17 22:02:02 +02:00
committed by spencergibb
parent 0fe10b119b
commit fb2b1c1784
2 changed files with 33 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2020 the original author or authors.
* Copyright 2013-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ package org.springframework.cloud.gateway.config;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration;
@@ -43,6 +44,7 @@ import org.springframework.security.web.server.SecurityWebFilterChain;
public class GatewayReactiveOAuth2AutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ReactiveClientRegistrationRepository.class)
public ReactiveOAuth2AuthorizedClientManager gatewayReactiveOAuth2AuthorizedClientManager(
ReactiveClientRegistrationRepository clientRegistrationRepository,

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2020 the original author or authors.
* Copyright 2013-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -225,6 +225,25 @@ public class GatewayAutoConfigurationTests {
});
}
@Test
public void gatewayReactiveOAuth2AuthorizedClientManagerBacksOffForCustomBean() {
new ReactiveWebApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class,
ReactiveOAuth2ClientAutoConfiguration.class, GatewayReactiveOAuth2AutoConfiguration.class))
.withUserConfiguration(TestReactiveOAuth2AuthorizedClientManagerConfig.class)
.withPropertyValues(
"spring.security.oauth2.client.provider[testprovider].authorization-uri=http://localhost",
"spring.security.oauth2.client.provider[testprovider].token-uri=http://localhost/token",
"spring.security.oauth2.client.registration[test].provider=testprovider",
"spring.security.oauth2.client.registration[test].authorization-grant-type=authorization_code",
"spring.security.oauth2.client.registration[test].redirect-uri=http://localhost/redirect",
"spring.security.oauth2.client.registration[test].client-id=login-client")
.run(context -> {
assertThat(context).hasSingleBean(ReactiveOAuth2AuthorizedClientManager.class);
assertThat(context).hasBean("myReactiveOAuth2AuthorizedClientManager");
});
}
@Test
public void noTokenRelayFilter() {
assertThatThrownBy(() -> {
@@ -558,4 +577,14 @@ public class GatewayAutoConfigurationTests {
}
@Configuration
protected static class TestReactiveOAuth2AuthorizedClientManagerConfig {
@Bean
ReactiveOAuth2AuthorizedClientManager myReactiveOAuth2AuthorizedClientManager() {
return authorizeRequest -> null;
}
}
}