From 3cf4e01f8471ac983a16880417707e2704198bf5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 16 May 2024 15:59:24 +0200 Subject: [PATCH] Polishing. Configure ResponseTimeout for a Request, move off deprecated API by always configuring a PoolingHttpClientConnectionManager. See gh-861 Original pull request: gh-866 --- .../ClientHttpRequestFactoryFactory.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java index f3e754ac..a5b5c578 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/ClientHttpRequestFactoryFactory.java @@ -47,11 +47,11 @@ import okhttp3.ConnectionSpec; import okhttp3.OkHttpClient.Builder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hc.client5.http.config.ConnectionConfig; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.DefaultSchemePortResolver; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; 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.impl.routing.SystemDefaultRoutePlanner; import org.apache.hc.client5.http.ssl.HttpsSupport; @@ -298,6 +298,28 @@ public class ClientHttpRequestFactoryFactory { httpClientBuilder.setRoutePlanner( new SystemDefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE, ProxySelector.getDefault())); + Timeout readTimeout = Timeout.ofMilliseconds(options.getReadTimeout().toMillis()); + Timeout connectTimeout = Timeout.ofMilliseconds(options.getConnectionTimeout().toMillis()); + + ConnectionConfig connectionConfig = ConnectionConfig.custom() + .setConnectTimeout(connectTimeout) // + .setSocketTimeout(readTimeout) // + .build(); + + RequestConfig requestConfig = RequestConfig.custom() + .setConnectionRequestTimeout(connectTimeout) + .setResponseTimeout(readTimeout) + .setAuthenticationEnabled(true) // + .setRedirectsEnabled(true) + .build(); + + PoolingHttpClientConnectionManagerBuilder connectionManagerBuilder = PoolingHttpClientConnectionManagerBuilder // + .create() + .setDefaultConnectionConfig(connectionConfig) // + .setDefaultSocketConfig(SocketConfig.custom() // + .setSoTimeout(readTimeout) + .build()); + if (hasSslConfiguration(sslConfiguration)) { SSLContext sslContext = getSSLContext(sslConfiguration); @@ -316,24 +338,12 @@ public class ClientHttpRequestFactoryFactory { SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, enabledProtocols, enabledCipherSuites, HttpsSupport.getDefaultHostnameVerifier()); - PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder // - .create() - .setSSLSocketFactory(sslSocketFactory) // - .setDefaultSocketConfig(SocketConfig.custom() // - .setSoTimeout(Timeout.ofMilliseconds(options.getReadTimeout().toMillis())) - .build()) // - .build(); // - httpClientBuilder.setConnectionManager(connectionManager); + connectionManagerBuilder.setSSLSocketFactory(sslSocketFactory); } - RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(Timeout.ofMilliseconds(options.getConnectionTimeout().toMillis())) - .setConnectionRequestTimeout(Timeout.ofMilliseconds(options.getReadTimeout().toMillis())) - .setAuthenticationEnabled(true) // - .setRedirectsEnabled(true) - .build(); - httpClientBuilder.setDefaultRequestConfig(requestConfig); + httpClientBuilder.setConnectionManager(connectionManagerBuilder.build()); + return httpClientBuilder; }