From 00926981ca60f8d1abc2894f44279067c4b89622 Mon Sep 17 00:00:00 2001 From: Joris Kuipers Date: Sat, 5 Sep 2020 19:24:25 +0200 Subject: [PATCH] Match headers in spring-cloud-gateway-mvc case-insensitively Fixes gh-1930 --- .../mvc/config/ProxyExchangeArgumentResolver.java | 7 +++++-- .../cloud/gateway/mvc/ProductionConfigurationTests.java | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java index 87381573..009dc8de 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java @@ -33,6 +33,8 @@ import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; +import static java.util.stream.Collectors.toSet; + /** * @author Dave Syer * @author Tim Ysewyn @@ -56,7 +58,8 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol } public void setAutoForwardedHeaders(Set autoForwardedHeaders) { - this.autoForwardedHeaders = autoForwardedHeaders; + this.autoForwardedHeaders = autoForwardedHeaders.stream().map(String::toLowerCase) + .collect(toSet()); } public void setSensitive(Set sensitive) { @@ -100,7 +103,7 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol HttpHeaders headers = new HttpHeaders(); while (headerNames.hasMoreElements()) { String header = headerNames.nextElement(); - if (this.autoForwardedHeaders.contains(header)) { + if (this.autoForwardedHeaders.contains(header.toLowerCase())) { headers.addAll(header, Collections.list(nativeRequest.getHeaders(header))); } diff --git a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java index 669d6205..5d9446af 100644 --- a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java +++ b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java @@ -58,7 +58,7 @@ import org.springframework.web.util.UriComponentsBuilder; import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) -@SpringBootTest(properties = { "spring.cloud.gateway.proxy.auto-forward=baz" }, +@SpringBootTest(properties = { "spring.cloud.gateway.proxy.auto-forward=Baz" }, webEnvironment = WebEnvironment.RANDOM_PORT) @ContextConfiguration(classes = TestApplication.class) public class ProductionConfigurationTests { @@ -277,11 +277,14 @@ public class ProductionConfigurationTests { RequestEntity .get(rest.getRestTemplate().getUriTemplateHandler() .expand("/proxy/headers")) - .header("foo", "bar").header("abc", "xyz") + .header("foo", "bar") + .header("abc", "xyz") .header("baz", "fob").build(), Map.class) .getBody(); - assertThat(headers).doesNotContainKey("foo").doesNotContainKey("hello") + assertThat(headers) + .doesNotContainKey("foo") + .doesNotContainKey("hello") .containsKeys("bar", "abc"); assertThat(headers.get("bar")).containsOnly("hello");