Skip to content

Commit c7c3e55

Browse files
committed
X-Forwarded-Ssl is listed in ForwardedHeaderFilter
Issue: SPR-16863
1 parent d77797f commit c7c3e55

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public class ForwardedHeaderFilter extends OncePerRequestFilter {
7373
FORWARDED_HEADER_NAMES.add("X-Forwarded-Port");
7474
FORWARDED_HEADER_NAMES.add("X-Forwarded-Proto");
7575
FORWARDED_HEADER_NAMES.add("X-Forwarded-Prefix");
76+
FORWARDED_HEADER_NAMES.add("X-Forwarded-Ssl");
7677
}
7778

7879

spring-web/src/main/java/org/springframework/web/filter/reactive/ForwardedHeaderFilter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class ForwardedHeaderFilter implements WebFilter {
5252
FORWARDED_HEADER_NAMES.add("X-Forwarded-Port");
5353
FORWARDED_HEADER_NAMES.add("X-Forwarded-Proto");
5454
FORWARDED_HEADER_NAMES.add("X-Forwarded-Prefix");
55+
FORWARDED_HEADER_NAMES.add("X-Forwarded-Ssl");
5556
}
5657

5758

spring-web/src/test/java/org/springframework/web/filter/ForwardedHeaderFilterTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public class ForwardedHeaderFilterTests {
4848
private static final String X_FORWARDED_HOST = "x-forwarded-host";
4949
private static final String X_FORWARDED_PORT = "x-forwarded-port";
5050
private static final String X_FORWARDED_PREFIX = "x-forwarded-prefix";
51+
private static final String X_FORWARDED_SSL = "x-forwarded-ssl";
5152

5253

5354
private final ForwardedHeaderFilter filter = new ForwardedHeaderFilter();
@@ -221,6 +222,7 @@ public void shouldFilter() {
221222
testShouldFilter(X_FORWARDED_HOST);
222223
testShouldFilter(X_FORWARDED_PORT);
223224
testShouldFilter(X_FORWARDED_PROTO);
225+
testShouldFilter(X_FORWARDED_SSL);
224226
}
225227

226228
private void testShouldFilter(String headerName) {
@@ -263,6 +265,7 @@ public void forwardedRequestInRemoveOnlyMode() throws Exception {
263265
this.request.addHeader(X_FORWARDED_PROTO, "https");
264266
this.request.addHeader(X_FORWARDED_HOST, "84.198.58.199");
265267
this.request.addHeader(X_FORWARDED_PORT, "443");
268+
this.request.addHeader(X_FORWARDED_SSL, "on");
266269
this.request.addHeader("foo", "bar");
267270

268271
this.filter.setRemoveOnly(true);
@@ -278,6 +281,30 @@ public void forwardedRequestInRemoveOnlyMode() throws Exception {
278281
assertNull(actual.getHeader(X_FORWARDED_PROTO));
279282
assertNull(actual.getHeader(X_FORWARDED_HOST));
280283
assertNull(actual.getHeader(X_FORWARDED_PORT));
284+
assertNull(actual.getHeader(X_FORWARDED_SSL));
285+
assertEquals("bar", actual.getHeader("foo"));
286+
}
287+
288+
@Test
289+
public void forwardedRequestWithSsl() throws Exception {
290+
this.request.setRequestURI("/mvc-showcase");
291+
this.request.addHeader(X_FORWARDED_SSL, "on");
292+
this.request.addHeader(X_FORWARDED_HOST, "84.198.58.199");
293+
this.request.addHeader(X_FORWARDED_PORT, "443");
294+
this.request.addHeader("foo", "bar");
295+
296+
this.filter.doFilter(this.request, new MockHttpServletResponse(), this.filterChain);
297+
HttpServletRequest actual = (HttpServletRequest) this.filterChain.getRequest();
298+
299+
assertEquals("https://84.198.58.199/mvc-showcase", actual.getRequestURL().toString());
300+
assertEquals("https", actual.getScheme());
301+
assertEquals("84.198.58.199", actual.getServerName());
302+
assertEquals(443, actual.getServerPort());
303+
assertTrue(actual.isSecure());
304+
305+
assertNull(actual.getHeader(X_FORWARDED_SSL));
306+
assertNull(actual.getHeader(X_FORWARDED_HOST));
307+
assertNull(actual.getHeader(X_FORWARDED_PORT));
281308
assertEquals("bar", actual.getHeader("foo"));
282309
}
283310

spring-web/src/test/java/org/springframework/web/filter/reactive/ForwardedHeaderFilterTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public void removeOnly() {
5151
.header("X-Forwarded-Host", "example.com")
5252
.header("X-Forwarded-Port", "8080")
5353
.header("X-Forwarded-Proto", "http")
54-
.header("X-Forwarded-Prefix", "prefix"));
54+
.header("X-Forwarded-Prefix", "prefix")
55+
.header("X-Forwarded-Ssl", "on"));
5556

5657
this.filter.setRemoveOnly(true);
5758
this.filter.filter(exchange, this.filterChain).block(Duration.ZERO);
@@ -63,6 +64,7 @@ public void removeOnly() {
6364
assertFalse(result.containsKey("X-Forwarded-Port"));
6465
assertFalse(result.containsKey("X-Forwarded-Proto"));
6566
assertFalse(result.containsKey("X-Forwarded-Prefix"));
67+
assertFalse(result.containsKey("X-Forwarded-Ssl"));
6668
}
6769

6870
@Test

0 commit comments

Comments
 (0)