From ad1dc247dc8f8b3fd1e8bb29f7256ca601d3cde6 Mon Sep 17 00:00:00 2001 From: young891221 Date: Wed, 16 Jan 2019 16:39:02 +0900 Subject: [PATCH 1/3] create HandlerStrategies only one --- .../rewrite/ModifyRequestBodyGatewayFilterFactory.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java index 402cea0c..8874109d 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java @@ -17,10 +17,13 @@ package org.springframework.cloud.gateway.filter.factory.rewrite; +import java.util.List; import java.util.Map; import org.springframework.cloud.gateway.support.BodyInserterContext; import org.springframework.cloud.gateway.support.CachedBodyOutputMessage; +import org.springframework.http.codec.HttpMessageReader; +import org.springframework.web.reactive.function.server.HandlerStrategies; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -41,8 +44,11 @@ import org.springframework.web.reactive.function.server.ServerRequest; public class ModifyRequestBodyGatewayFilterFactory extends AbstractGatewayFilterFactory { + private final List> messageReaders; + public ModifyRequestBodyGatewayFilterFactory() { super(Config.class); + this.messageReaders = HandlerStrategies.withDefaults().messageReaders(); } @Deprecated @@ -55,8 +61,7 @@ public class ModifyRequestBodyGatewayFilterFactory public GatewayFilter apply(Config config) { return (exchange, chain) -> { Class inClass = config.getInClass(); - - ServerRequest serverRequest = new DefaultServerRequest(exchange); + ServerRequest serverRequest = new DefaultServerRequest(exchange, this.messageReaders); //TODO: flux or mono Mono modifiedBody = serverRequest.bodyToMono(inClass) // .log("modify_request_mono", Level.INFO) From eba10481b571b17aa74ba2393ece4f74c70ae871 Mon Sep 17 00:00:00 2001 From: young891221 Date: Thu, 17 Jan 2019 13:56:37 +0900 Subject: [PATCH 2/3] code refactoring --- .../factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java index 8874109d..afbeefe3 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java @@ -62,6 +62,7 @@ public class ModifyRequestBodyGatewayFilterFactory return (exchange, chain) -> { Class inClass = config.getInClass(); ServerRequest serverRequest = new DefaultServerRequest(exchange, this.messageReaders); + //TODO: flux or mono Mono modifiedBody = serverRequest.bodyToMono(inClass) // .log("modify_request_mono", Level.INFO) From 242fc34305c28c4a6e35a5e509fec3a25571b1c1 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 17 Jan 2019 10:10:50 -0500 Subject: [PATCH 3/3] Validate that we actually have a hostname when using a load balanced URI. Fixes #779 --- .../cloud/gateway/filter/RouteToRequestUrlFilter.java | 6 ++++++ .../gateway/filter/RouteToRequestUrlFilterTests.java | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java index e76046e5..e8d439f9 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java @@ -68,6 +68,12 @@ public class RouteToRequestUrlFilter implements GlobalFilter, Ordered { routeUri = URI.create(routeUri.getSchemeSpecificPart()); } + if("lb".equalsIgnoreCase(routeUri.getScheme()) && routeUri.getHost() == null) { + //Load balanced URIs should always have a host. If the host is null it is most + //likely because the host name was invalid (for example included an underscore) + throw new IllegalStateException("Invalid host: " + routeUri.toString()); + } + URI mergedUrl = UriComponentsBuilder.fromUri(uri) // .uri(routeUri) .scheme(routeUri.getScheme()) diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java index 97ec6c5a..477ccf62 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java @@ -66,6 +66,14 @@ public class RouteToRequestUrlFilterTests { assertThat(uri).hasScheme("lb").hasHost("myhost"); } + @Test(expected = IllegalStateException.class) + public void invalidHost() { + MockServerHttpRequest request = MockServerHttpRequest + .get("http://localhost/getb") + .build(); + testFilter(request, "lb://my_host"); + } + @Test public void happyPathLbPlusScheme() { MockServerHttpRequest request = MockServerHttpRequest