FELIX-4657 : HTTP SSLFilter wrong port. Apply patch from Antonio Sanso
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1628674 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
index d0c2289..75d8ac5 100644
--- a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
+++ b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
@@ -19,6 +19,7 @@
package org.apache.felix.http.sslfilter.internal;
import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.ATTR_SSL_CERTIFICATE;
+import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_PORT;
import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.HTTPS;
import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.UTF_8;
import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.X_509;
@@ -100,4 +101,21 @@
}
return tmp;
}
+
+ public int getServerPort()
+ {
+ int port;
+
+ try
+ {
+ String fwdPort = getHeader(HDR_X_FORWARDED_PORT);
+ port = Integer.valueOf(fwdPort);
+ }
+ catch (Exception e)
+ {
+ // Use default port for the used protocol...
+ port = -1;
+ }
+ return port;
+ }
}
diff --git a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
index c079a84..325b109 100644
--- a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
+++ b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
@@ -21,6 +21,7 @@
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_PORT;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -81,4 +82,33 @@
assertEquals("https://some/page", sreq.getRequestURL().toString());
assertEquals("https://some/page", req.getRequestURL().toString());
}
+
+ @Test
+ public void test_getServerPort() throws Exception
+ {
+ HttpServletRequest req = Mockito.mock(HttpServletRequest.class);
+ SslFilterRequest sreq = new SslFilterRequest(req, null);
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn(null);
+ assertEquals(-1, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("");
+ assertEquals(-1, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("WRONG");
+ assertEquals(-1, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("W1");
+ assertEquals(-1, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("443");
+ assertEquals(443, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("80");
+ assertEquals(80, sreq.getServerPort());
+
+ when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("4502");
+ assertEquals(4502, sreq.getServerPort());
+
+ }
}