From a2ef4895a4eef32b180b7c1808b079486497d467 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Tue, 21 Feb 2023 11:18:31 -0500 Subject: [PATCH] Fixes for gateway routes on management port. Uses the LocalAddress to check against management port because request.getURI().getPort() can be set by the host header "myhost:8888", for example. Fixes gh-2870 --- .../gateway/handler/RoutePredicateHandlerMapping.java | 2 +- .../RoutePredicateHandlerMappingIntegrationTests.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java index 39b89197..54e8735c 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java @@ -77,7 +77,7 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { protected Mono getHandlerInternal(ServerWebExchange exchange) { // don't handle requests on management port if set and different than server port if (this.managementPortType == DIFFERENT && this.managementPort != null - && exchange.getRequest().getURI().getPort() == this.managementPort) { + && exchange.getRequest().getLocalAddress().getPort() == this.managementPort) { return Mono.empty(); } exchange.getAttributes().put(GATEWAY_HANDLER_MAPPER_ATTR, getSimpleName()); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java index ea3e3338..4e65cbc6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java @@ -60,6 +60,13 @@ public class RoutePredicateHandlerMappingIntegrationTests extends BaseWebClientT .expectStatus().isNotFound(); } + @Test + public void requestsToManagementPortAndHostHeaderReturn404() { + String host = "example.com:8888"; + testClient.mutate().baseUrl("http://localhost:" + managementPort).build().get().uri("/get").header("host", host) + .exchange().expectStatus().isNotFound(); + } + @Test public void andNotWorksWithMissingParameter() { testClient.get().uri("/andnotquery").exchange().expectBody(String.class).isEqualTo("notsupplied");