From 894f31e6122f930015a5221394d1e8fb5ba464b5 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Fri, 6 Sep 2019 14:45:00 +1000 Subject: [PATCH] Issue #4048 Multiple proxy ports (#4063) Support multiple proxy port values. Signed-off-by: Greg Wilkins --- .../jetty/server/ForwardedRequestCustomizer.java | 8 ++++---- .../jetty/server/ForwardedRequestCustomizerTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java index ceb214ead34..095cd5f2552 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java @@ -630,16 +630,16 @@ public class ForwardedRequestCustomizer implements Customizer if (!getForwardedPortAsAuthority()) { if (_for == null) - _for = new PortSetHostPort(_request.getRemoteHost(), field.getIntValue()); + _for = new PortSetHostPort(_request.getRemoteHost(), Integer.parseInt(getLeftMost(field.getValue()))); else if (_for instanceof PossiblyPartialHostPort && _for.getPort() <= 0) - _for = new HostPort(HostPort.normalizeHost(_for.getHost()), field.getIntValue()); + _for = new HostPort(HostPort.normalizeHost(_for.getHost()), Integer.parseInt(getLeftMost(field.getValue()))); } else { if (_host == null) - _host = new PortSetHostPort(_request.getServerName(), field.getIntValue()); + _host = new PortSetHostPort(_request.getServerName(), Integer.parseInt(getLeftMost(field.getValue()))); else if (_host instanceof PossiblyPartialHostPort && _host.getPort() <= 0) - _host = new HostPort(HostPort.normalizeHost(_host.getHost()), field.getIntValue()); + _host = new HostPort(HostPort.normalizeHost(_host.getHost()), Integer.parseInt(getLeftMost(field.getValue()))); } } diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java index 03f4e9077e6..df8166b19a5 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java @@ -348,6 +348,18 @@ public class ForwardedRequestCustomizerTest .requestURL("http://myhost:2222/") .remoteAddr("[1:2:3:4:5:6:7:8]").remotePort(0) ), + Arguments.of(new Request("X-Forwarded-For and X-Forwarded-Port (multiple times combined)") + .headers( + "GET / HTTP/1.1", + "Host: myhost", + "X-Forwarded-Port: 2222, 3333", + "X-Forwarded-For: 1:2:3:4:5:6:7:8, 7:7:7:7:7:7:7:7" + ), + new Expectations() + .scheme("http").serverName("myhost").serverPort(2222) + .requestURL("http://myhost:2222/") + .remoteAddr("[1:2:3:4:5:6:7:8]").remotePort(0) + ), Arguments.of(new Request("X-Forwarded-Port") .headers( "GET / HTTP/1.1",