diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java index 7e698a11..c82919e8 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java @@ -61,7 +61,7 @@ public class RemoveRequestParameterGatewayFilterFactory URI newUri = UriComponentsBuilder.fromUri(request.getURI()) .replaceQueryParams(unmodifiableMultiValueMap(queryParams)) - .build(true).toUri(); + .build().toUri(); ServerHttpRequest updatedRequest = exchange.getRequest().mutate() .uri(newUri).build(); diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java index 9d8caab3..f22c0f06 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java @@ -47,11 +47,12 @@ public class RemoveRequestParameterGatewayFilterFactoryIntegrationTests @Test public void removeResponseHeaderFilterWorks() { - testClient.get().uri("/get?foo=bar&baz=bam") + testClient.get().uri("/get?foo=bar&baz=bam%20bar") .header("Host", "www.removerequestparamjava.org").exchange() .expectStatus().isOk().expectBody(Map.class).consumeWith(result -> { Map params = getMap(result.getResponseBody(), "args"); assertThat(params).doesNotContainKey("foo"); + assertThat(params).containsEntry("baz", "bam%20bar"); }); } diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java index 0b2b4192..f432b816 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java @@ -103,4 +103,27 @@ public class RemoveRequestParameterGatewayFilterFactoryTests { singletonList("xyz")); } + @Test + public void removeRequestParameterFilterShouldHandleRemainingParamsWhichRequiringEncoding() { + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") + .queryParam("foo", "bar").queryParam("aaa", "abc xyz") + .queryParam("bbb", "[xyz").queryParam("ccc", ",xyz").build(); + exchange = MockServerWebExchange.from(request); + NameConfig config = new NameConfig(); + config.setName("foo"); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() + .apply(config); + + filter.filter(exchange, filterChain); + + ServerHttpRequest actualRequest = captor.getValue().getRequest(); + assertThat(actualRequest.getQueryParams()).doesNotContainKey("foo"); + assertThat(actualRequest.getQueryParams()).containsEntry("aaa", + singletonList("abc xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("bbb", + singletonList("[xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("ccc", + singletonList(",xyz")); + } + }