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