From 1e76e7122567bee0d22dd5399877911a039fc18a Mon Sep 17 00:00:00 2001 From: Tillmann Heigel Date: Thu, 28 Jun 2018 10:08:32 +0200 Subject: [PATCH 1/4] Fix a small typo in spring-cloud-gateway.adoc PostGatewayFilterFactory example wasn't compiling. --- docs/src/main/asciidoc/spring-cloud-gateway.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/spring-cloud-gateway.adoc b/docs/src/main/asciidoc/spring-cloud-gateway.adoc index 73a145cb..0621df6e 100644 --- a/docs/src/main/asciidoc/spring-cloud-gateway.adoc +++ b/docs/src/main/asciidoc/spring-cloud-gateway.adoc @@ -990,7 +990,7 @@ public class PostGatewayFilterFactory extends AbstractGatewayFilterFactory { return chain.filter(exchange).then(Mono.fromRunnable(() -> { - ServerHttpReponse response = exchange.getResponse(); + ServerHttpResponse response = exchange.getResponse(); //Manipulate the response in some way })); }; From 84ac4963e81ec953388d4d5a4ab6497580eb291f Mon Sep 17 00:00:00 2001 From: Tillmann Heigel Date: Thu, 19 Jul 2018 19:14:05 +0200 Subject: [PATCH 2/4] This proves a bug with the ForwardedHeadersFilter (#440) --- .../headers/ForwardedHeadersFilterTests.java | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java index 21e343fa..19c637d1 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java @@ -17,6 +17,9 @@ package org.springframework.cloud.gateway.filter.headers; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.FORWARDED_HEADER; + import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.UnknownHostException; @@ -27,16 +30,12 @@ import java.util.List; import java.util.Map; import org.junit.Test; - import org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.Forwarded; import org.springframework.http.HttpHeaders; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.web.server.MockServerWebExchange; import org.springframework.util.StringUtils; -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.FORWARDED_HEADER; - /** * @author Spencer Gibb */ @@ -67,6 +66,36 @@ public class ForwardedHeadersFilterTests { .containsEntry("for", "\"10.0.0.1:80\""); } + @Test + public void forwardedHeaderExists() throws UnknownHostException { + MockServerHttpRequest request = MockServerHttpRequest + .get("http://localhost/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .header(FORWARDED_HEADER, "for=12.34.56.78;host=example.com;proto=https; for=23.45.67.89") + .build(); + + ForwardedHeadersFilter filter = new ForwardedHeadersFilter(); + + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); + + assertThat(headers.get(FORWARDED_HEADER)).hasSize(2); + + + List forwardeds = ForwardedHeadersFilter.parse(headers.get(FORWARDED_HEADER)); + + assertThat(forwardeds).hasSize(2); + Forwarded addedForwardedHeader = forwardeds.get(0); + Forwarded existingForwardedHeader = forwardeds.get(1); + + assertThat(existingForwardedHeader.getValues()) + .containsEntry("proto", "http") + .containsEntry("for", "\"10.0.0.1:80\""); + + assertThat(addedForwardedHeader.getValues()) + .containsEntry("proto", "https") + .containsEntry("for", "23.45.67.89"); + } + @Test public void noHostHeader() throws UnknownHostException { MockServerHttpRequest request = MockServerHttpRequest From 23800cbd5c01818f0f4692836792ccf92cc8800c Mon Sep 17 00:00:00 2001 From: Tillmann Heigel Date: Thu, 19 Jul 2018 19:15:22 +0200 Subject: [PATCH 3/4] This solves a bug with the ForwardedHeadersFilter (#440) --- .../cloud/gateway/filter/headers/ForwardedHeadersFilter.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java index f5671412..d3941636 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import org.jetbrains.annotations.Nullable; - import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; @@ -58,7 +57,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { List forwardeds = parse(original.get(FORWARDED_HEADER)); for (Forwarded f : forwardeds) { - updated.add(FORWARDED_HEADER, f.toString()); + updated.add(FORWARDED_HEADER, f.toHeaderValue()); } //TODO: add new forwarded From b54825766a5a5eb896824bb0d5cad19e4fb67f09 Mon Sep 17 00:00:00 2001 From: Tillmann Heigel Date: Fri, 20 Jul 2018 09:18:52 +0200 Subject: [PATCH 4/4] Use the correct code formatter as mentioned by @ryanjbaxter --- .../headers/ForwardedHeadersFilterTests.java | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java index 19c637d1..dc1df9e3 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java @@ -17,18 +17,6 @@ package org.springframework.cloud.gateway.filter.headers; -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.FORWARDED_HEADER; - -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.junit.Test; import org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.Forwarded; import org.springframework.http.HttpHeaders; @@ -36,6 +24,14 @@ import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.web.server.MockServerWebExchange; import org.springframework.util.StringUtils; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.gateway.filter.headers.ForwardedHeadersFilter.FORWARDED_HEADER; + /** * @author Spencer Gibb */ @@ -121,7 +117,7 @@ public class ForwardedHeadersFilterTests { @Test public void forwardedParsedCorrectly() { - String[] valid = new String[] { + String[] valid = new String[]{ "for=\"_gazonk\"", "for=192.0.2.60;proto=http;by=203.0.113.43", "for=192.0.2.43, for=198.51.100.17", @@ -132,15 +128,15 @@ public class ForwardedHeadersFilterTests { @SuppressWarnings("unchecked") List>> expectedFor = new ArrayList>>() {{ - add(list(map("for", "\"_gazonk\""))); - add(list(map("for", "192.0.2.60", "proto", "http", "by", "203.0.113.43"))); - add(list(map("for", "192.0.2.43"), map("for", "198.51.100.17"))); - add(list(map("for", "12.34.56.78", "host", "example.com", "proto", "https"), - map("for", "23.45.67.89"))); - add(list(map("for", "12.34.56.78"), - map("for", "23.45.67.89", "secret", "egah2CGj55fSJFs"), - map("for", "10.1.2.3"))); - add(list(map("for", "\"[2001:db8:cafe::17]:4711\""))); + add(list(map("for", "\"_gazonk\""))); + add(list(map("for", "192.0.2.60", "proto", "http", "by", "203.0.113.43"))); + add(list(map("for", "192.0.2.43"), map("for", "198.51.100.17"))); + add(list(map("for", "12.34.56.78", "host", "example.com", "proto", "https"), + map("for", "23.45.67.89"))); + add(list(map("for", "12.34.56.78"), + map("for", "23.45.67.89", "secret", "egah2CGj55fSJFs"), + map("for", "10.1.2.3"))); + add(list(map("for", "\"[2001:db8:cafe::17]:4711\""))); }}; for (int i = 0; i < valid.length; i++) {