Skip to content

Commit

Permalink
feat: add proxy support to HttpService2 (#5586)
Browse files Browse the repository at this point in the history
* feat: add proxy support to HttpService2 #5585

* feat: merge from Gluu

---------

Co-authored-by: Yuriy Movchan <Yuriy.Movchan@gmail.com>
  • Loading branch information
yuremm and yurem committed Jul 20, 2023
1 parent 89ae7c7 commit 0fb05b3
Showing 1 changed file with 44 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.commons.codec.binary.Base64;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
Expand All @@ -34,12 +35,14 @@
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.routing.HttpRoutePlanner;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
Expand All @@ -53,6 +56,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;

/**
* Provides operations with http/https requests
*
Expand Down Expand Up @@ -93,13 +97,31 @@ public CloseableHttpClient getHttpsClientTrustAll() throws KeyManagementExceptio
}

public CloseableHttpClient getHttpsClient() {
return getHttpsClient(RequestConfig.custom().build());
}

public CloseableHttpClient getHttpsClient(RequestConfig requestConfig) {
log.trace("Connection manager stats: {}", connectionManager.getTotalStats());

return HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
.setDefaultRequestConfig(RequestConfig.copy(requestConfig).setCookieSpec(CookieSpecs.STANDARD).build())
.setConnectionManager(connectionManager).build();
}

public CloseableHttpClient getHttpsClient(HttpRoutePlanner routerPlanner) {
log.trace("Connection manager stats: {}", connectionManager.getTotalStats());

return getHttpsClient(RequestConfig.custom().build(), routerPlanner);
}

public CloseableHttpClient getHttpsClient(RequestConfig requestConfig, HttpRoutePlanner routerPlanner) {
log.trace("Connection manager stats: {}", connectionManager.getTotalStats());

return HttpClients.custom()
.setDefaultRequestConfig(RequestConfig.copy(requestConfig).setCookieSpec(CookieSpecs.STANDARD).build())
.setConnectionManager(connectionManager).setRoutePlanner(routerPlanner).build();
}

public CloseableHttpClient getHttpsClient(String trustStoreType, String trustStorePath, String trustStorePassword) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException {
log.trace("Connection manager stats: {}", connectionManager.getTotalStats());

Expand Down Expand Up @@ -203,7 +225,7 @@ public HttpServiceResponse executeGet(HttpClient httpClient, String requestUri)
}

public byte[] getResponseContent(HttpResponse httpResponse) throws IOException {
if ((httpResponse == null) || !isResponseStastusCodeOk(httpResponse)) {
if ((httpResponse == null) || !isResponseStastusCodeOk(httpResponse)) {
return null;
}

Expand All @@ -222,7 +244,7 @@ public byte[] getResponseContent(HttpResponse httpResponse) throws IOException {
}

public void consume(HttpResponse httpResponse) throws IOException {
if ((httpResponse == null) || !isResponseStastusCodeOk(httpResponse)) {
if ((httpResponse == null) || !isResponseStastusCodeOk(httpResponse)) {
return;
}

Expand Down Expand Up @@ -259,15 +281,18 @@ public String convertEntityToString(byte[] responseBytes, String charsetName) th

public boolean isResponseStastusCodeOk(HttpResponse httpResponse) {
int responseStastusCode = httpResponse.getStatusLine().getStatusCode();
if ((responseStastusCode == HttpStatus.SC_OK) || (responseStastusCode == HttpStatus.SC_CREATED) || (responseStastusCode == HttpStatus.SC_ACCEPTED) ||
(responseStastusCode == HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION) || (responseStastusCode == HttpStatus.SC_NO_CONTENT) || (responseStastusCode == HttpStatus.SC_RESET_CONTENT) ||
(responseStastusCode == HttpStatus.SC_PARTIAL_CONTENT) || (responseStastusCode == HttpStatus.SC_MULTI_STATUS)) {
if ((responseStastusCode == HttpStatus.SC_OK) || (responseStastusCode == HttpStatus.SC_CREATED) || (responseStastusCode == HttpStatus.SC_ACCEPTED)
|| (responseStastusCode == HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION) || (responseStastusCode == HttpStatus.SC_NO_CONTENT) || (responseStastusCode == HttpStatus.SC_RESET_CONTENT)
|| (responseStastusCode == HttpStatus.SC_PARTIAL_CONTENT) || (responseStastusCode == HttpStatus.SC_MULTI_STATUS)) {
return true;
}

return false;
}


public boolean isResponseStatusCodeOk(HttpResponse httpResponse) {
return isResponseStastusCodeOk(httpResponse);
}

public boolean isContentTypeXml(HttpResponse httpResponse) {
Header contentType = httpResponse.getEntity().getContentType();
Expand Down Expand Up @@ -296,4 +321,15 @@ public String constructServerUrl(final HttpServletRequest request) {
return redirectUrl.toLowerCase();
}

public HttpRoutePlanner buildDefaultRoutePlanner(final String hostname, final int port, final String scheme) {
//Creating an HttpHost object for proxy
HttpHost proxyHost = new HttpHost(hostname, port, scheme);

return new DefaultProxyRoutePlanner(proxyHost);
}

public HttpRoutePlanner buildDefaultRoutePlanner(final String proxy) {
return buildDefaultRoutePlanner(proxy, -1, null);
}

}

0 comments on commit 0fb05b3

Please sign in to comment.