Skip to content

Commit b258009

Browse files
committed
Support nonProxyHosts
Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
1 parent 9feb9f4 commit b258009

File tree

5 files changed

+43
-17
lines changed

5 files changed

+43
-17
lines changed

connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ class ApacheConnector implements Connector {
282282

283283
URI proxyUri = HttpUrlConnector.getProxyUri(config);
284284
if (proxyUri != null) {
285+
// FIXME No proxy hosts?
285286
HttpHost proxy = new HttpHost(proxyUri.getHost(), proxyUri.getPort(), proxyUri.getScheme());
286287
String userName = ClientProperties.getValue(config.getProperties(),
287288
ClientProperties.PROXY_USERNAME, "http.proxyUser");

connectors/apache5-connector/src/main/java/org/glassfish/jersey/apache5/connector/Apache5Connector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ class Apache5Connector implements Connector {
283283

284284
URI proxyUri = HttpUrlConnector.getProxyUri(config);
285285
if (proxyUri != null) {
286+
// FIXME No proxy hosts?
286287
HttpHost proxy = new HttpHost(proxyUri.getScheme(), proxyUri.getHost(), proxyUri.getPort());
287288
String userName = ClientProperties.getValue(config.getProperties(),
288289
ClientProperties.PROXY_USERNAME, "http.proxyUser");

connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class JettyConnector implements Connector {
186186

187187
URI proxyUri = HttpUrlConnector.getProxyUri(config);
188188
if (proxyUri != null) {
189+
// FIXME No proxy hosts?
189190
final ProxyConfiguration proxyConfig = client.getProxyConfiguration();
190191
proxyConfig.getProxies().add(new HttpProxy(proxyUri.getHost(), proxyUri.getPort()));
191192
String proxyUsername = ClientProperties.getValue(config.getProperties(),

core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.concurrent.Future;
4343
import java.util.logging.Level;
4444
import java.util.logging.Logger;
45+
import java.util.regex.Pattern;
4546
import java.util.stream.Collectors;
4647

4748
import javax.net.ssl.HostnameVerifier;
@@ -53,6 +54,7 @@
5354
import javax.ws.rs.core.MultivaluedMap;
5455
import javax.ws.rs.core.Response;
5556

57+
import org.glassfish.jersey.ExternalProperties;
5658
import org.glassfish.jersey.client.ClientProperties;
5759
import org.glassfish.jersey.client.ClientRequest;
5860
import org.glassfish.jersey.client.ClientResponse;
@@ -338,34 +340,55 @@ private static URI getProxyUriValue(Object proxy) {
338340
* @return the URI or null
339341
*/
340342
public static URI getProxyUri(Configuration config) {
343+
URI uri = null;
341344
Object proxyUri = config.getProperty(ClientProperties.PROXY_URI);
342345
if (proxyUri == null) {
343-
String proxyHost = System.getProperty("http.proxyHost");
344-
String proxyPort = System.getProperty("http.proxyPort");
346+
String proxyHost = System.getProperty(ExternalProperties.HTTP_PROXY_HOST);
347+
String proxyPort = System.getProperty(ExternalProperties.HTTP_PROXY_PORT);
345348
if (proxyHost != null && proxyPort != null) {
346-
return URI.create(proxyHost + ":" + proxyPort);
349+
if (proxyHost.startsWith("http://")) {
350+
uri = URI.create(proxyHost + ":" + proxyPort);
351+
} else {
352+
uri = URI.create("http://" + proxyHost + ":" + proxyPort);
353+
}
347354
}
348355
} else {
349-
return getProxyUriValue(proxyUri);
356+
uri = getProxyUriValue(proxyUri);
350357
}
351-
return null;
358+
return uri;
352359
}
353360

354361
private ClientResponse _apply(final ClientRequest request) throws IOException {
355362
final HttpURLConnection uc;
356363
Proxy proxy = null;
357-
URI proxyUri = getProxyUri(request.getConfiguration());
358-
if (proxyUri != null) {
359-
String username = ClientProperties.getValue(request.getConfiguration().getProperties(),
360-
ClientProperties.PROXY_USERNAME, "http.proxyUser");
361-
String password = ClientProperties.getValue(request.getConfiguration().getProperties(),
362-
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
363-
if (username != null && password != null) {
364-
StringBuilder auth = new StringBuilder().append(username).append(":").append(password);
365-
String encoded = "Basic " + Base64.getEncoder().encodeToString(auth.toString().getBytes());
366-
request.getHeaders().put("Proxy-Authorization", Arrays.asList(encoded));
364+
boolean skipProxy = false;
365+
// Evaluate HTTP_NON_PROXY_HOSTS if HTTP_PROXY_HOST is also set
366+
if (System.getProperty(ExternalProperties.HTTP_PROXY_HOST) != null
367+
&& System.getProperty(ExternalProperties.HTTP_NON_PROXY_HOSTS) != null) {
368+
String[] nonProxyHosts = System.getProperty(ExternalProperties.HTTP_NON_PROXY_HOSTS)
369+
.trim().split("\\|");
370+
String currentHost = request.getUri().getHost();
371+
for (String nonProxyHost : nonProxyHosts) {
372+
if (Pattern.matches(nonProxyHost, currentHost)) {
373+
skipProxy = true;
374+
break;
375+
}
376+
}
377+
}
378+
if (!skipProxy) {
379+
URI proxyUri = getProxyUri(request.getConfiguration());
380+
if (proxyUri != null) {
381+
String username = ClientProperties.getValue(request.getConfiguration().getProperties(),
382+
ClientProperties.PROXY_USERNAME, "http.proxyUser");
383+
String password = ClientProperties.getValue(request.getConfiguration().getProperties(),
384+
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
385+
if (username != null && password != null) {
386+
StringBuilder auth = new StringBuilder().append(username).append(":").append(password);
387+
String encoded = "Basic " + Base64.getEncoder().encodeToString(auth.toString().getBytes());
388+
request.getHeaders().put("Proxy-Authorization", Arrays.asList(encoded));
389+
}
390+
proxy = new Proxy(Type.HTTP, new InetSocketAddress(proxyUri.getHost(), proxyUri.getPort()));
367391
}
368-
proxy = new Proxy(Type.HTTP, new InetSocketAddress(proxyUri.getHost(), proxyUri.getPort()));
369392
}
370393
uc = this.connectionFactory.getConnection(request.getUri().toURL(), proxy);
371394
uc.setDoInput(true);

tests/integration/externalproperties/src/test/java/org/glassfish/jersey/tests/externalproperties/HttpProxyTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at

0 commit comments

Comments
 (0)