File tree Expand file tree Collapse file tree 2 files changed +30
-5
lines changed
main/java/org/springframework/web/servlet/support
test/java/org/springframework/web/servlet/support Expand file tree Collapse file tree 2 files changed +30
-5
lines changed Original file line number Diff line number Diff line change @@ -94,9 +94,20 @@ public static ServletUriComponentsBuilder fromRequestUri(HttpServletRequest requ
9494 public static ServletUriComponentsBuilder fromRequest (HttpServletRequest request ) {
9595 String scheme = request .getScheme ();
9696 int port = request .getServerPort ();
97-
98- String header = request .getHeader ("X-Forwarded-Host" );
99- String host = StringUtils .hasText (header ) ? header : request .getServerName ();
97+ String host = request .getServerName ();
98+
99+ String xForwardedHostHeader = request .getHeader ("X-Forwarded-Host" );
100+
101+ if (StringUtils .hasText (xForwardedHostHeader )) {
102+ if (StringUtils .countOccurrencesOf (xForwardedHostHeader , ":" ) == 1 ) {
103+ String [] hostAndPort = StringUtils .split (xForwardedHostHeader , ":" );
104+ host = hostAndPort [0 ];
105+ port = Integer .parseInt (hostAndPort [1 ]);
106+ }
107+ else {
108+ host = xForwardedHostHeader ;
109+ }
110+ }
100111
101112 ServletUriComponentsBuilder builder = new ServletUriComponentsBuilder ();
102113 builder .scheme (scheme );
Original file line number Diff line number Diff line change 1616
1717package org .springframework .web .servlet .support ;
1818
19- import static org .junit .Assert .assertEquals ;
20-
2119import org .junit .Before ;
2220import org .junit .Test ;
2321import org .springframework .mock .web .test .MockHttpServletRequest ;
2422import org .springframework .web .context .request .RequestContextHolder ;
2523import org .springframework .web .context .request .ServletRequestAttributes ;
24+ import org .springframework .web .util .UriComponents ;
25+
26+ import static org .junit .Assert .*;
2627
2728/**
2829 * @author Rossen Stoyanchev
@@ -93,6 +94,19 @@ public void fromRequestWithForwardedHostHeader() {
9394 assertEquals ("http://anotherHost/mvc-showcase/data/param?foo=123" , result );
9495 }
9596
97+ // SPR-10701
98+
99+ @ Test
100+ public void fromRequestWithForwardedHostAndPortHeader () {
101+ request .addHeader ("X-Forwarded-Host" , "webtest.foo.bar.com:443" );
102+ request .setRequestURI ("/mvc-showcase/data/param" );
103+ request .setQueryString ("foo=123" );
104+ UriComponents result = ServletUriComponentsBuilder .fromRequest (request ).build ();
105+
106+ assertEquals ("webtest.foo.bar.com" , result .getHost ());
107+ assertEquals (443 , result .getPort ());
108+ }
109+
96110 @ Test
97111 public void fromContextPath () {
98112 request .setRequestURI ("/mvc-showcase/data/param" );
You can’t perform that action at this time.
0 commit comments