diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java index 38262fa0..63bd7782 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java @@ -71,7 +71,6 @@ import org.springframework.cloud.config.server.environment.SvnKitEnvironmentRepo import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties; import org.springframework.cloud.config.server.environment.VaultEnvironmentRepository; import org.springframework.cloud.config.server.environment.VaultEnvironmentRepositoryFactory; -import org.springframework.cloud.config.server.environment.vault.SpringVaultClientAuthenticationProvider; import org.springframework.cloud.config.server.environment.vault.SpringVaultClientConfiguration; import org.springframework.cloud.config.server.environment.vault.SpringVaultEnvironmentRepository; import org.springframework.cloud.config.server.environment.vault.SpringVaultEnvironmentRepositoryFactory; @@ -239,17 +238,9 @@ public class EnvironmentRepositoryConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnClass(VaultTemplate.class) + @Import(SpringVaultClientConfiguration.class) static class SpringVaultFactoryConfig { - @Bean - public SpringVaultClientConfiguration vaultClientConfiguration( - VaultEnvironmentProperties vaultProperties, - ConfigTokenProvider tokenProvider, - List authProviders) { - return new SpringVaultClientConfiguration(vaultProperties, tokenProvider, - authProviders); - } - @Bean public SpringVaultEnvironmentRepositoryFactory vaultEnvironmentRepositoryFactory( ObjectProvider request, EnvironmentWatch watch, diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfiguration.java index 635239e4..a08e8118 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfiguration.java @@ -22,9 +22,11 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.InitializingBean; import org.springframework.cloud.config.server.environment.ConfigTokenProvider; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod; +import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.util.StringUtils; @@ -51,7 +53,9 @@ import org.springframework.web.util.UriComponentsBuilder; * * @author Scott Frederick */ -public class SpringVaultClientConfiguration extends AbstractVaultConfiguration { +@Configuration +public class SpringVaultClientConfiguration extends AbstractVaultConfiguration + implements InitializingBean { private static final String VAULT_PROPERTIES_PREFIX = "spring.cloud.config.server.vault."; @@ -59,7 +63,7 @@ public class SpringVaultClientConfiguration extends AbstractVaultConfiguration { private final ConfigTokenProvider configTokenProvider; - private final RestOperations externalRestOperations; + private RestOperations externalRestOperations; private final Log log = LogFactory.getLog(getClass()); @@ -72,7 +76,10 @@ public class SpringVaultClientConfiguration extends AbstractVaultConfiguration { this.vaultProperties = vaultProperties; this.configTokenProvider = configTokenProvider; this.authProviders = authProviders; + } + @Override + public void afterPropertiesSet() { this.externalRestOperations = new RestTemplate( clientHttpRequestFactoryWrapper().getClientHttpRequestFactory()); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java index 6117195d..2641a22c 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java @@ -26,6 +26,11 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.context.annotation.UserConfigurations; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration; +import org.springframework.cloud.config.server.config.ConfigServerConfiguration; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties; import org.springframework.cloud.config.server.environment.vault.SpringVaultClientConfiguration.ConfigTokenProviderAuthentication; import org.springframework.cloud.config.server.environment.vault.authentication.AppRoleClientAuthenticationProvider; @@ -40,6 +45,7 @@ import org.springframework.cloud.config.server.environment.vault.authentication. import org.springframework.cloud.config.server.environment.vault.authentication.PcfClientAuthenticationProvider; import org.springframework.cloud.config.server.environment.vault.authentication.TokenClientAuthenticationProvider; import org.springframework.core.io.ClassPathResource; +import org.springframework.util.ClassUtils; import org.springframework.vault.authentication.AppRoleAuthentication; import org.springframework.vault.authentication.AwsEc2Authentication; import org.springframework.vault.authentication.AwsIamAuthentication; @@ -284,11 +290,31 @@ class SpringVaultClientConfigurationTests { private SpringVaultClientConfiguration getConfiguration( VaultEnvironmentProperties properties) { - return new SpringVaultClientConfiguration(properties, () -> null, authProviders); + SpringVaultClientConfiguration configuration = new SpringVaultClientConfiguration( + properties, () -> null, authProviders); + configuration.afterPropertiesSet(); + return configuration; } private String base64(String value) { return new String(Base64.getEncoder().encode(value.getBytes())); } + @Test + @SuppressWarnings("deprecation") + public void springVaultClientConfigurationIsAProxy() { + new WebApplicationContextRunner() + .withPropertyValues("spring.profiles.active=vault") + .withConfiguration(UserConfigurations.of(ConfigServerConfiguration.class)) + .withConfiguration( + AutoConfigurations.of(ConfigServerAutoConfiguration.class)) + .run(context -> { + assertThat(context).getBean(SpringVaultClientConfiguration.class) + .isNotNull() + .matches(svcc -> ClassUtils + .isCglibProxyClassName(svcc.getClass().getName()), + "is a proxy"); + }); + } + }