diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java index 11eb688c7e..8e6927a8b1 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java @@ -403,30 +403,27 @@ private void proxy() { private void appendXForwarded(URI uri) { // Append the legacy headers if they were already added upstream - String host = headers.getFirst("x-forwarded-host"); - if (host == null) { - return; - } - host = host + "," + uri.getHost(); - headers.set("x-forwarded-host", host); - String proto = headers.getFirst("x-forwarded-proto"); - if (proto == null) { - return; - } - proto = proto + "," + uri.getScheme(); - headers.set("x-forwarded-proto", proto); + appendXForwardedHeader("x-forwarded-host", () -> uri.getHost()); + appendXForwardedHeader("x-forwarded-proto", () -> uri.getScheme()); + } + + private void appendXForwardedHeader(String headerName, Supplier uriValue) { + String existingValue = headers.getFirst(headerName); + if (existingValue != null) { + StringBuilder builder = new StringBuilder(existingValue); + builder.append(",").append(uriValue.get()); + headers.set(headerName, builder.toString()); + } } private void appendForwarded(URI uri) { String forwarded = headers.getFirst("forwarded"); - if (forwarded != null) { - forwarded = forwarded + ","; - } - else { - forwarded = ""; + StringBuilder sb = new StringBuilder(); + if (StringUtils.hasText(forwarded)) { + sb.append(forwarded).append(","); } - forwarded = forwarded + forwarded(uri, webRequest.getHeader("host")); - headers.set("forwarded", forwarded); + sb.append(forwarded(uri, webRequest.getHeader("host"))); + headers.set("forwarded", sb.toString()); } private String forwarded(URI uri, String hostHeader) {