Merge branch '4.0.x' of https://github.com/spring-cloud/spring-cloud-config into 4.0.x
This commit is contained in:
@@ -18,6 +18,8 @@ package org.springframework.cloud.config.client.tls;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hc.core5.http.io.SocketConfig;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
@@ -25,6 +27,8 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.cloud.config.client.ConfigClientProperties;
|
||||
import org.springframework.cloud.config.client.ConfigClientRequestTemplateFactory;
|
||||
import org.springframework.cloud.config.server.EnableConfigServer;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -68,6 +72,23 @@ public class ConfigClientTlsTests extends AbstractTlsSetup {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
public void tlsSetsRequestReadTimeout() {
|
||||
try (TlsConfigClientRunner client = createConfigClient()) {
|
||||
enableTlsClient(client);
|
||||
client.property("logging.level.org.springframework.boot.context.config", "TRACE");
|
||||
client.property("logging.level.org.springframework.cloud.config.client", "DEBUG");
|
||||
int timeoutMillis = (60 * 1000 * 3) + 5001;
|
||||
client.property("spring.cloud.config.request-read-timeout", String.valueOf(timeoutMillis));
|
||||
client.start();
|
||||
ConfigClientProperties configClientProperties = client.app().getBean(ConfigClientProperties.class);
|
||||
TestFactory factory = new TestFactory(configClientProperties);
|
||||
SocketConfig.Builder socketBuilder = factory.getSocketBuilderForTls();
|
||||
assertThat(socketBuilder.build().getSoTimeout().toMilliseconds()).isEqualTo(timeoutMillis);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tlsClientCanBeDisabled() {
|
||||
try (TlsConfigClientRunner client = createConfigClient()) {
|
||||
@@ -158,4 +179,16 @@ public class ConfigClientTlsTests extends AbstractTlsSetup {
|
||||
|
||||
}
|
||||
|
||||
static class TestFactory extends ConfigClientRequestTemplateFactory {
|
||||
|
||||
TestFactory(ConfigClientProperties properties) {
|
||||
super(LogFactory.getLog(TestFactory.class), properties);
|
||||
}
|
||||
|
||||
public SocketConfig.Builder getSocketBuilderForTls() {
|
||||
return createSocketBuilderForTls(getProperties());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.security.GeneralSecurityException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
@@ -30,6 +31,8 @@ import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
|
||||
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
|
||||
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
|
||||
import org.apache.hc.core5.http.io.SocketConfig;
|
||||
import org.apache.hc.core5.util.Timeout;
|
||||
|
||||
import org.springframework.cloud.configuration.SSLContextFactory;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -83,20 +86,13 @@ public class ConfigClientRequestTemplateFactory {
|
||||
return template;
|
||||
}
|
||||
|
||||
private ClientHttpRequestFactory createHttpRequestFactory(ConfigClientProperties client) {
|
||||
protected ClientHttpRequestFactory createHttpRequestFactory(ConfigClientProperties client) {
|
||||
if (client.getTls().isEnabled()) {
|
||||
try {
|
||||
SSLContextFactory factory = new SSLContextFactory(client.getTls());
|
||||
SSLContext sslContext = factory.createSSLContext();
|
||||
SSLConnectionSocketFactoryBuilder sslConnectionSocketFactoryBuilder = SSLConnectionSocketFactoryBuilder
|
||||
.create();
|
||||
sslConnectionSocketFactoryBuilder.setSslContext(sslContext);
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder
|
||||
.create().setSSLSocketFactory(sslConnectionSocketFactoryBuilder.build()).build();
|
||||
PoolingHttpClientConnectionManager connectionManager = createConnectionManagerForTls(client);
|
||||
HttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
|
||||
HttpComponentsClientHttpRequestFactory result = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
|
||||
result.setReadTimeout(client.getRequestReadTimeout());
|
||||
result.setConnectTimeout(client.getRequestConnectTimeout());
|
||||
return result;
|
||||
|
||||
@@ -113,6 +109,26 @@ public class ConfigClientRequestTemplateFactory {
|
||||
return result;
|
||||
}
|
||||
|
||||
protected PoolingHttpClientConnectionManager createConnectionManagerForTls(ConfigClientProperties client)
|
||||
throws GeneralSecurityException, IOException {
|
||||
SSLContextFactory factory = new SSLContextFactory(client.getTls());
|
||||
SSLContext sslContext = factory.createSSLContext();
|
||||
SSLConnectionSocketFactoryBuilder sslConnectionSocketFactoryBuilder = SSLConnectionSocketFactoryBuilder
|
||||
.create();
|
||||
sslConnectionSocketFactoryBuilder.setSslContext(sslContext);
|
||||
SocketConfig.Builder socketBuilder = createSocketBuilderForTls(client);
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||
.setDefaultSocketConfig(socketBuilder.build())
|
||||
.setSSLSocketFactory(sslConnectionSocketFactoryBuilder.build()).build();
|
||||
return connectionManager;
|
||||
}
|
||||
|
||||
protected SocketConfig.Builder createSocketBuilderForTls(ConfigClientProperties client) {
|
||||
SocketConfig.Builder socketBuilder = SocketConfig.custom()
|
||||
.setSoTimeout(Timeout.of(client.getRequestReadTimeout(), TimeUnit.MILLISECONDS));
|
||||
return socketBuilder;
|
||||
}
|
||||
|
||||
public void addAuthorizationToken(HttpHeaders httpHeaders, String username, String password) {
|
||||
String authorization = properties.getHeaders().get(AUTHORIZATION);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user