28
28
import org .springframework .web .util .WebUtils ;
29
29
30
30
/**
31
- * A UriComponentsBuilder that extracts information from an HttpServletRequest.
31
+ * A UriComponentsBuilder that extracts information from the HttpServletRequest.
32
32
*
33
33
* @author Rossen Stoyanchev
34
34
* @since 3.1
@@ -56,8 +56,10 @@ protected ServletUriComponentsBuilder() {
56
56
* an HttpServletRequest.
57
57
*/
58
58
public static ServletUriComponentsBuilder fromContextPath (HttpServletRequest request ) {
59
+ String path = request .getContextPath ();
60
+ path = prependForwardedPrefix (request , path );
59
61
ServletUriComponentsBuilder builder = fromRequest (request );
60
- builder .replacePath (request . getContextPath () );
62
+ builder .replacePath (path );
61
63
builder .replaceQuery (null );
62
64
return builder ;
63
65
}
@@ -98,7 +100,6 @@ public static ServletUriComponentsBuilder fromRequest(HttpServletRequest request
98
100
String scheme = request .getScheme ();
99
101
String host = request .getServerName ();
100
102
int port = request .getServerPort ();
101
- String path = request .getRequestURI ();
102
103
103
104
String hostHeader = request .getHeader ("X-Forwarded-Host" );
104
105
if (StringUtils .hasText (hostHeader )) {
@@ -125,10 +126,8 @@ public static ServletUriComponentsBuilder fromRequest(HttpServletRequest request
125
126
scheme = protocolHeader ;
126
127
}
127
128
128
- String prefix = request .getHeader ("X-Forwarded-Prefix" );
129
- if (StringUtils .hasText (prefix )) {
130
- path = prefix + path ;
131
- }
129
+ String path = request .getRequestURI ();
130
+ path = prependForwardedPrefix (request , path );
132
131
133
132
ServletUriComponentsBuilder builder = new ServletUriComponentsBuilder ();
134
133
builder .scheme (scheme );
@@ -141,6 +140,14 @@ public static ServletUriComponentsBuilder fromRequest(HttpServletRequest request
141
140
return builder ;
142
141
}
143
142
143
+ private static String prependForwardedPrefix (HttpServletRequest request , String path ) {
144
+ String prefix = request .getHeader ("X-Forwarded-Prefix" );
145
+ if (StringUtils .hasText (prefix )) {
146
+ path = prefix + path ;
147
+ }
148
+ return path ;
149
+ }
150
+
144
151
/**
145
152
* Same as {@link #fromContextPath(HttpServletRequest)} except the
146
153
* request is obtained through {@link RequestContextHolder}.
0 commit comments