Also apply X-Forwarded-Prefix in fromContextPath

Issue: SPR-12500
This commit is contained in:
Rossen Stoyanchev
2014-12-04 10:15:55 -05:00
parent 9ef0bdcb17
commit 7f11c1ee2f
2 changed files with 33 additions and 7 deletions

View File

@@ -28,7 +28,7 @@ import org.springframework.web.util.UrlPathHelper;
import org.springframework.web.util.WebUtils;
/**
* A UriComponentsBuilder that extracts information from an HttpServletRequest.
* A UriComponentsBuilder that extracts information from the HttpServletRequest.
*
* @author Rossen Stoyanchev
* @since 3.1
@@ -56,8 +56,10 @@ public class ServletUriComponentsBuilder extends UriComponentsBuilder {
* an HttpServletRequest.
*/
public static ServletUriComponentsBuilder fromContextPath(HttpServletRequest request) {
String path = request.getContextPath();
path = prependForwardedPrefix(request, path);
ServletUriComponentsBuilder builder = fromRequest(request);
builder.replacePath(request.getContextPath());
builder.replacePath(path);
builder.replaceQuery(null);
return builder;
}
@@ -98,7 +100,6 @@ public class ServletUriComponentsBuilder extends UriComponentsBuilder {
String scheme = request.getScheme();
String host = request.getServerName();
int port = request.getServerPort();
String path = request.getRequestURI();
String hostHeader = request.getHeader("X-Forwarded-Host");
if (StringUtils.hasText(hostHeader)) {
@@ -125,10 +126,8 @@ public class ServletUriComponentsBuilder extends UriComponentsBuilder {
scheme = protocolHeader;
}
String prefix = request.getHeader("X-Forwarded-Prefix");
if (StringUtils.hasText(prefix)) {
path = prefix + path;
}
String path = request.getRequestURI();
path = prependForwardedPrefix(request, path);
ServletUriComponentsBuilder builder = new ServletUriComponentsBuilder();
builder.scheme(scheme);
@@ -141,6 +140,14 @@ public class ServletUriComponentsBuilder extends UriComponentsBuilder {
return builder;
}
private static String prependForwardedPrefix(HttpServletRequest request, String path) {
String prefix = request.getHeader("X-Forwarded-Prefix");
if (StringUtils.hasText(prefix)) {
path = prefix + path;
}
return path;
}
/**
* Same as {@link #fromContextPath(HttpServletRequest)} except the
* request is obtained through {@link RequestContextHolder}.