From 4ac1fcb5489d363ac0d439b1e7116e5377878461 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Wed, 6 Oct 2021 23:26:37 -0400 Subject: [PATCH] Do not write headers when value is null. Fixes gh-2378 --- .../filter/headers/XForwardedHeadersFilter.java | 3 +++ .../headers/XForwardedHeadersFilterTests.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java index f80ab45f..1623349e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java @@ -284,6 +284,9 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered { } private void write(HttpHeaders headers, String name, String value, boolean append) { + if (value == null) { + return; + } if (append) { headers.add(name, value); // these headers should be treated as a single comma separated header diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java index b16bbe2d..3283c6d4 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java @@ -296,4 +296,17 @@ public class XForwardedHeadersFilterTests { assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("10.0.0.1,10.0.0.1"); } + @Test + public void nullValuesSkipped() throws Exception { + MockServerHttpRequest request = MockServerHttpRequest.get("/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .header(X_FORWARDED_FOR_HEADER, "10.0.0.1").build(); + + XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); + + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); + + assertThat(headers).doesNotContainKeys(X_FORWARDED_PROTO_HEADER, X_FORWARDED_HOST_HEADER); + } + }