From 626f20e77271f943073062a58357d692a20b2617 Mon Sep 17 00:00:00 2001 From: Hyeon Sung Date: Wed, 22 Jan 2025 21:42:14 +0900 Subject: [PATCH 1/3] Refactor header appending logic for better readability This PR refactors the logic for adding headers in the appendXForwarded and appendForwarded methods. Signed-off-by: Hyeon Sung --- .../cloud/gateway/mvc/ProxyExchange.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) 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..9b0ada192f 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; + 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()); } - 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); } private void appendForwarded(URI uri) { - String forwarded = headers.getFirst("forwarded"); - if (forwarded != null) { - forwarded = forwarded + ","; - } - else { - forwarded = ""; + String forwarded = headers.getFirst("forwarded"); + StringBuilder builder = new StringBuilder(); + if (StringUtils.hasText(forwarded)) { + builder.append(forwarded).append(","); } - forwarded = forwarded + forwarded(uri, webRequest.getHeader("host")); - headers.set("forwarded", forwarded); + builder.append(forwarded(uri, webRequest.getHeader("host"))); + headers.set("forwarded", builder.toString()); } private String forwarded(URI uri, String hostHeader) { From 1f857daa0cc5b97f93a4cba3f02157ec3d7b6166 Mon Sep 17 00:00:00 2001 From: Hyeon Sung Date: Wed, 22 Jan 2025 21:44:46 +0900 Subject: [PATCH 2/3] This PR refactors the logic for adding headers in the appendXForwarded and appendForwarded methods This PR refactors the logic for adding headers in the appendXForwarded and appendForwarded methods. Signed-off-by: Hyeon Sung --- .../org/springframework/cloud/gateway/mvc/ProxyExchange.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9b0ada192f..260a755147 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 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From c510ae3942a29bb48b97bfc6db3bf2dcad1a913e Mon Sep 17 00:00:00 2001 From: Hyeon Sung Date: Wed, 22 Jan 2025 21:57:31 +0900 Subject: [PATCH 3/3] add import add import Signed-off-by: Hyeon Sung --- .../org/springframework/cloud/gateway/mvc/ProxyExchange.java | 1 + 1 file changed, 1 insertion(+) 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 260a755147..1cc4ed2f94 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 @@ -35,6 +35,7 @@ import java.util.Set; import java.util.Vector; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import jakarta.servlet.ReadListener;