SpringBoot+Eureka+CloudConfig in a SSL environment
Define META-INF/spring.factories and add a org.springframework.cloud.bootstrap.BootstrapConfiguration = ... line
The class could be like:
@Configuration
@BootstrapConfiguration
public class SslConfiguration {
@Value("${http.client.ssl.trust-store}")
private URL trustStore;
@Value("${http.client.ssl.trust-store-password}")
private String trustStorePassword;
@Bean
public DiscoveryClient.DiscoveryClientOptionalArgs getTrustStoredEurekaClient(SSLContext sslContext) {
DiscoveryClient.DiscoveryClientOptionalArgs args = new DiscoveryClient.DiscoveryClientOptionalArgs();
args.setSSLContext(sslContext);
return args;
}
@Bean
public SSLContext sslContext() throws Exception {
return new SSLContextBuilder().loadTrustMaterial(trustStore, trustStorePassword.toCharArray()).build();
}
}
And because the DiscoveryClientOptionalArgs are now defined twice, then add another class, which is loaded after the Spring Context is up
@Configuration
public class DiscoveryServiceConfiguration {
@Bean
public static BeanFactoryPostProcessor registerPostProcessor() {
return (ConfigurableListableBeanFactory beanFactory) -> {
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
for (String beanDefinitionName : registry.getBeanDefinitionNames()) {
if (beanDefinitionName.equalsIgnoreCase("discoveryClientOptionalArgs")) {
BeanDefinition beanDefinition = registry.containsBeanDefinition(beanDefinitionName) ? registry.getBeanDefinition(beanDefinitionName) : null;
if (beanDefinition != null) {
if (registry.containsBeanDefinition(beanDefinitionName)) {
registry.removeBeanDefinition(beanDefinitionName);
}
}
}
}
};
}
}
Then it works too. You don't need to define JVM args anymore.
interesting thing - If I use embedded Undertow instead of embedded Tomcat, it works - but is this the solution?
dependencies {
compile("org.springframework.boot:spring-boot-starter") {
exclude module: "tomcat-embed-el"
}
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}
compile('org.springframework.boot:spring-boot-starter-undertow')
...
}