KEYCLOAK-17796 Add options to http-builder to enable expect-continue, and to disable re-use of connections
This commit is contained in:
parent
c868e1b173
commit
c3a15cb368
2 changed files with 30 additions and 4 deletions
|
@ -61,6 +61,7 @@ import org.apache.http.util.EntityUtils;
|
||||||
public class DefaultHttpClientFactory implements HttpClientFactory {
|
public class DefaultHttpClientFactory implements HttpClientFactory {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(DefaultHttpClientFactory.class);
|
private static final Logger logger = Logger.getLogger(DefaultHttpClientFactory.class);
|
||||||
|
private static final String configScope = "keycloak.connectionsHttpClient.default.";
|
||||||
|
|
||||||
private volatile CloseableHttpClient httpClient;
|
private volatile CloseableHttpClient httpClient;
|
||||||
private Config.Scope config;
|
private Config.Scope config;
|
||||||
|
@ -147,6 +148,9 @@ public class DefaultHttpClientFactory implements HttpClientFactory {
|
||||||
String[] proxyMappings = config.getArray("proxy-mappings");
|
String[] proxyMappings = config.getArray("proxy-mappings");
|
||||||
boolean disableTrustManager = config.getBoolean("disable-trust-manager", false);
|
boolean disableTrustManager = config.getBoolean("disable-trust-manager", false);
|
||||||
|
|
||||||
|
boolean expectContinueEnabled = getBooleanConfigWithSysPropFallback("expect-continue-enabled", false);
|
||||||
|
boolean resuseConnections = getBooleanConfigWithSysPropFallback("reuse-connections", true);
|
||||||
|
|
||||||
HttpClientBuilder builder = new HttpClientBuilder();
|
HttpClientBuilder builder = new HttpClientBuilder();
|
||||||
|
|
||||||
builder.socketTimeout(socketTimeout, TimeUnit.MILLISECONDS)
|
builder.socketTimeout(socketTimeout, TimeUnit.MILLISECONDS)
|
||||||
|
@ -157,7 +161,9 @@ public class DefaultHttpClientFactory implements HttpClientFactory {
|
||||||
.connectionTTL(connectionTTL, TimeUnit.MILLISECONDS)
|
.connectionTTL(connectionTTL, TimeUnit.MILLISECONDS)
|
||||||
.maxConnectionIdleTime(maxConnectionIdleTime, TimeUnit.MILLISECONDS)
|
.maxConnectionIdleTime(maxConnectionIdleTime, TimeUnit.MILLISECONDS)
|
||||||
.disableCookies(disableCookies)
|
.disableCookies(disableCookies)
|
||||||
.proxyMappings(ProxyMappings.valueOf(proxyMappings));
|
.proxyMappings(ProxyMappings.valueOf(proxyMappings))
|
||||||
|
.expectContinueEnabled(expectContinueEnabled)
|
||||||
|
.reuseConnections(resuseConnections);
|
||||||
|
|
||||||
TruststoreProvider truststoreProvider = session.getProvider(TruststoreProvider.class);
|
TruststoreProvider truststoreProvider = session.getProvider(TruststoreProvider.class);
|
||||||
boolean disableTruststoreProvider = truststoreProvider == null || truststoreProvider.getTruststore() == null;
|
boolean disableTruststoreProvider = truststoreProvider == null || truststoreProvider.getTruststore() == null;
|
||||||
|
@ -198,6 +204,15 @@ public class DefaultHttpClientFactory implements HttpClientFactory {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean getBooleanConfigWithSysPropFallback(String key, boolean defaultValue) {
|
||||||
|
Boolean value = config.getBoolean(key);
|
||||||
|
if (value == null) {
|
||||||
|
String s = System.getProperty(configScope + key);
|
||||||
|
if (s != null) {
|
||||||
|
value = Boolean.parseBoolean(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value != null ? value : defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +107,7 @@ public class HttpClientBuilder {
|
||||||
protected TimeUnit establishConnectionTimeoutUnits = TimeUnit.MILLISECONDS;
|
protected TimeUnit establishConnectionTimeoutUnits = TimeUnit.MILLISECONDS;
|
||||||
protected boolean disableCookies = false;
|
protected boolean disableCookies = false;
|
||||||
protected ProxyMappings proxyMappings;
|
protected ProxyMappings proxyMappings;
|
||||||
|
protected boolean expectContinueEnabled = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Socket inactivity timeout
|
* Socket inactivity timeout
|
||||||
|
@ -220,6 +221,10 @@ public class HttpClientBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HttpClientBuilder expectContinueEnabled(boolean expectContinueEnabled) {
|
||||||
|
this.expectContinueEnabled = expectContinueEnabled;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
static class VerifierWrapper implements X509HostnameVerifier {
|
static class VerifierWrapper implements X509HostnameVerifier {
|
||||||
protected HostnameVerifier verifier;
|
protected HostnameVerifier verifier;
|
||||||
|
@ -287,7 +292,8 @@ public class HttpClientBuilder {
|
||||||
|
|
||||||
RequestConfig requestConfig = RequestConfig.custom()
|
RequestConfig requestConfig = RequestConfig.custom()
|
||||||
.setConnectTimeout((int) establishConnectionTimeout)
|
.setConnectTimeout((int) establishConnectionTimeout)
|
||||||
.setSocketTimeout((int) socketTimeout).build();
|
.setSocketTimeout((int) socketTimeout)
|
||||||
|
.setExpectContinueEnabled(expectContinueEnabled).build();
|
||||||
|
|
||||||
org.apache.http.impl.client.HttpClientBuilder builder = HttpClients.custom()
|
org.apache.http.impl.client.HttpClientBuilder builder = HttpClients.custom()
|
||||||
.setDefaultRequestConfig(requestConfig)
|
.setDefaultRequestConfig(requestConfig)
|
||||||
|
@ -310,6 +316,11 @@ public class HttpClientBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disableCookies) builder.disableCookieManagement();
|
if (disableCookies) builder.disableCookieManagement();
|
||||||
|
|
||||||
|
if (!reuseConnections) {
|
||||||
|
builder.setConnectionReuseStrategy(new NoConnectionReuseStrategy());
|
||||||
|
}
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|
Loading…
Reference in a new issue