From c10d88460c782385ab031ac88388e3c1c39b1ce4 Mon Sep 17 00:00:00 2001 From: Nicholas DiPiazza Date: Fri, 15 Jan 2021 21:27:16 -0600 Subject: [PATCH] Add two missing configuration for Apache - DefaultAuthSchemeRegistry and RedirectStrategy Signed-off-by: Nicholas DiPiazza --- .../connector/ApacheClientProperties.java | 13 +++++++ .../apache/connector/ApacheConnector.java | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java index d5c2ff8a01..05f59b2dc4 100644 --- a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java +++ b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java @@ -156,6 +156,19 @@ public final class ApacheClientProperties { */ public static final String KEEPALIVE_STRATEGY = "jersey.config.apache.client.keepAliveStrategy"; + /** + * RedirectStrategy which can customize how redirects are handled. + *

+ * The value MUST be a subclass of {@link RedirectStrategy}. + */ + public static final String REDIRECT_STRATEGY = "jersey.config.apache.client.redirectStrategy"; + + /** + * DefaultAuthSchemeRegistry which can customize the auth scheme used. + *

+ * The value MUST be a subclass of {@link org.apache.http.config.Registry}. + */ + public static final String DEFAULT_AUTH_SCHEME_REGISTRY = "jersey.config.apache.client.defaultAuthSchemeRegistry"; /** * Strategy that closes the Apache Connection. Accepts an instance of {@link ApacheConnectionClosingStrategy}. diff --git a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java index 9a7c3c776a..50049c0174 100644 --- a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java +++ b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java @@ -62,6 +62,7 @@ import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; +import org.apache.http.auth.AuthSchemeProvider; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; @@ -69,6 +70,7 @@ import org.apache.http.client.CredentialsProvider; import org.apache.http.client.HttpClient; import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.RedirectStrategy; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -249,6 +251,34 @@ class ApacheConnector implements Connector { } } + Object redirectStrategy = config.getProperties().get(ApacheClientProperties.REDIRECT_STRATEGY); + if (redirectStrategy != null) { + if (!(redirectStrategy instanceof RedirectStrategy)) { + LOGGER.log( + Level.WARNING, + LocalizationMessages.IGNORING_VALUE_OF_PROPERTY( + ApacheClientProperties.REDIRECT_STRATEGY, + redirectStrategy.getClass().getName(), + RedirectStrategy.class.getName()) + ); + redirectStrategy = null; + } + } + + Object defaultAuthSchemeRegistry = config.getProperties().get(ApacheClientProperties.DEFAULT_AUTH_SCHEME_REGISTRY); + if (defaultAuthSchemeRegistry != null) { + if (!(defaultAuthSchemeRegistry instanceof Registry)) { + LOGGER.log( + Level.WARNING, + LocalizationMessages.IGNORING_VALUE_OF_PROPERTY( + ApacheClientProperties.DEFAULT_AUTH_SCHEME_REGISTRY, + defaultAuthSchemeRegistry.getClass().getName(), + Registry.class.getName()) + ); + defaultAuthSchemeRegistry = null; + } + } + final SSLContext sslContext = client.getSslContext(); final HttpClientBuilder clientBuilder = HttpClientBuilder.create(); @@ -317,6 +347,14 @@ class ApacheConnector implements Connector { requestConfig = requestConfigBuilder.build(); } + if (redirectStrategy != null) { + clientBuilder.setRedirectStrategy((RedirectStrategy) redirectStrategy); + } + + if (defaultAuthSchemeRegistry != null) { + clientBuilder.setDefaultAuthSchemeRegistry((Registry) defaultAuthSchemeRegistry); + } + if (requestConfig.getCookieSpec() == null || !requestConfig.getCookieSpec().equals(CookieSpecs.IGNORE_COOKIES)) { this.cookieStore = new BasicCookieStore(); clientBuilder.setDefaultCookieStore(cookieStore);