You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2022/11/25 17:25:25 UTC
[activemq] branch activemq-5.17.x updated: [AMQ-9102] Add http.nonProxyHost support in HTTP transport
This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch activemq-5.17.x
in repository https://gitbox.apache.org/repos/asf/activemq.git
The following commit(s) were added to refs/heads/activemq-5.17.x by this push:
new 60e79ed3d [AMQ-9102] Add http.nonProxyHost support in HTTP transport
60e79ed3d is described below
commit 60e79ed3d5aef3c3d9557d8b86e7a21c5a3ae2a1
Author: Jean-Baptiste Onofré <jb...@apache.org>
AuthorDate: Mon Nov 21 16:58:29 2022 +0100
[AMQ-9102] Add http.nonProxyHost support in HTTP transport
(cherry picked from commit 44a5539afc689f23c63a0d2e1786b48c0e52f3c3)
---
.../transport/http/HttpClientTransport.java | 25 ++++++++++++++++++++--
.../transport/http/HttpTransportSupport.java | 10 +++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java
index 42ad435ad..644ccfd03 100644
--- a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java
+++ b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java
@@ -19,8 +19,11 @@ package org.apache.activemq.transport.http;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InterruptedIOException;
-import java.net.URI;
+import java.net.*;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
@@ -56,6 +59,7 @@ import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
import org.apache.http.message.AbstractHttpMessage;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
@@ -320,7 +324,7 @@ public class HttpClientTransport extends HttpTransportSupport {
clientBuilder.addInterceptorLast(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) {
- // We expect to received a compression response that we un-gzip
+ // We expect to receive a compression response that we un-gzip
request.addHeader("Accept-Encoding", "gzip");
}
});
@@ -328,6 +332,23 @@ public class HttpClientTransport extends HttpTransportSupport {
RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
if (getProxyHost() != null) {
+ if (getNonProxyHosts() != null) {
+ List<String> nonProxyHosts = Arrays.asList(getNonProxyHosts().split("\\|"));
+ ProxySelector proxySelector = new ProxySelector() {
+ @Override
+ public List<Proxy> select(URI uri) {
+ return Collections.singletonList(nonProxyHosts.contains(uri.getHost()) ? Proxy.NO_PROXY : new Proxy(Proxy.Type.HTTP, new InetSocketAddress(getProxyHost(), getProxyPort())));
+ }
+
+ @Override
+ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
+ LOG.warn("Connect to {} failed", uri, ioe);
+ }
+ };
+ clientBuilder.setRoutePlanner(new SystemDefaultRoutePlanner(proxySelector));
+ }
+
+ clientBuilder.useSystemProperties();
HttpHost proxy = new HttpHost(getProxyHost(), getProxyPort());
requestConfigBuilder.setProxy(proxy);
diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
index 6f4012d59..9a546337c 100644
--- a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
+++ b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
@@ -29,6 +29,7 @@ import org.apache.activemq.transport.util.TextWireFormat;
public abstract class HttpTransportSupport extends TransportThreadSupport {
private static final int DEFAULT_PROXY_PORT = 8080;
private static final String PROPERTY_PROXY_HOST = "proxyHost";
+ private static final String PROPERTY_NON_PROXY_HOST = "nonProxyHosts";
private static final String PROPERTY_PROXY_PORT = "proxyPort";
private static final String PROPERTY_PROXY_USER = "proxyUser";
private static final String PROPERTY_PROXY_PASSWORD = "proxyPassword";
@@ -36,6 +37,7 @@ public abstract class HttpTransportSupport extends TransportThreadSupport {
private TextWireFormat textWireFormat;
private URI remoteUrl;
private String proxyHost;
+ private String nonProxyHosts;
private Integer proxyPort;
private String proxyUser;
private String proxyPassword;
@@ -75,6 +77,14 @@ public abstract class HttpTransportSupport extends TransportThreadSupport {
this.proxyHost = proxyHost;
}
+ public String getNonProxyHosts() {
+ return nonProxyHosts != null ? nonProxyHosts : getSystemProperty(PROPERTY_NON_PROXY_HOST);
+ }
+
+ public void setNonProxyHosts(String nonProxyHosts) {
+ this.nonProxyHosts = nonProxyHosts;
+ }
+
public int getProxyPort() {
return proxyPort != null ? proxyPort
: (getSystemProperty(PROPERTY_PROXY_PORT) != null