From d6d52b85a70f27bb9bf1f7969f92a285a216bf97 Mon Sep 17 00:00:00 2001 From: Zbynek Vavros Date: Mon, 20 May 2019 18:08:17 +0200 Subject: [PATCH] Location tranformation now uses X-Forwarded-* headers if present --- .../http/LocationTransformerObjectSupport.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java index f62e2f42f..ee33178ac 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/LocationTransformerObjectSupport.java @@ -86,8 +86,17 @@ protected void transformLocations(XPathExpression xPathExpression, *

This method is only called when the {@code transformLocations} property is true. */ protected String transformLocation(String location, HttpServletRequest request) { - StringBuilder url = new StringBuilder(request.getScheme()); - url.append("://").append(request.getServerName()).append(':').append(request.getServerPort()); + + String xForwardedProto = request.getHeader("X-Forwarded-Proto"); + String xForwardedHost = request.getHeader("X-Forwarded-Host"); + String xForwardedPort = request.getHeader("X-Forwarded-Port"); + + String scheme = StringUtils.hasText(xForwardedProto) ? xForwardedProto : request.getScheme(); + String serverName = StringUtils.hasText(xForwardedHost) ? xForwardedHost : request.getServerName(); + int serverPort = StringUtils.hasText(xForwardedPort) ? Integer.valueOf(xForwardedPort) : request.getServerPort(); + + StringBuilder url = new StringBuilder(scheme); + url.append("://").append(serverName).append(':').append(serverPort); if (location.startsWith("/")) { // a relative path, prepend the context path url.append(request.getContextPath()).append(location);