File tree 2 files changed +30
-5
lines changed
main/java/org/springframework/web/servlet/support
test/java/org/springframework/web/servlet/support
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
94
94
public static ServletUriComponentsBuilder fromRequest (HttpServletRequest request ) {
95
95
String scheme = request .getScheme ();
96
96
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
+ }
100
111
101
112
ServletUriComponentsBuilder builder = new ServletUriComponentsBuilder ();
102
113
builder .scheme (scheme );
Original file line number Diff line number Diff line change 16
16
17
17
package org .springframework .web .servlet .support ;
18
18
19
- import static org .junit .Assert .assertEquals ;
20
-
21
19
import org .junit .Before ;
22
20
import org .junit .Test ;
23
21
import org .springframework .mock .web .test .MockHttpServletRequest ;
24
22
import org .springframework .web .context .request .RequestContextHolder ;
25
23
import org .springframework .web .context .request .ServletRequestAttributes ;
24
+ import org .springframework .web .util .UriComponents ;
25
+
26
+ import static org .junit .Assert .*;
26
27
27
28
/**
28
29
* @author Rossen Stoyanchev
@@ -93,6 +94,19 @@ public void fromRequestWithForwardedHostHeader() {
93
94
assertEquals ("http://anotherHost/mvc-showcase/data/param?foo=123" , result );
94
95
}
95
96
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
+
96
110
@ Test
97
111
public void fromContextPath () {
98
112
request .setRequestURI ("/mvc-showcase/data/param" );
You can’t perform that action at this time.
0 commit comments