From 367cb80db94df5f23e95e22e13987437588d804b Mon Sep 17 00:00:00 2001 From: Jens Mallien Date: Mon, 30 Sep 2024 15:24:26 +0200 Subject: [PATCH] Fixes unicode url-rewrite Signed-off-by: Jens Mallien <108389225+jensmatw@users.noreply.github.com> --- .../mvc/filter/BeforeFilterFunctions.java | 2 +- .../filter/BeforeFilterFunctionsTests.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java index 343bfe8e..c8ac1a42 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java @@ -327,7 +327,7 @@ public abstract class BeforeFilterFunctions { String path = request.uri().getPath(); String newPath = pattern.matcher(path).replaceAll(normalizedReplacement); - URI rewrittenUri = UriComponentsBuilder.fromUri(request.uri()).replacePath(newPath).build().toUri(); + URI rewrittenUri = UriComponentsBuilder.fromUri(request.uri()).replacePath(newPath).encode().build().toUri(); ServerRequest modified = ServerRequest.from(request).uri(rewrittenUri).build(); diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java index f933ef78..889ceeab 100644 --- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java +++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java @@ -55,4 +55,28 @@ public class BeforeFilterFunctionsTests { assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%20spaces"); } + @Test + public void rewritePathWithEnDash() { + MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with–en–dashes") + .buildRequest(null); + + ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList()); + + ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request); + + assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%E2%80%93en%E2%80%93dashes"); + } + + @Test + public void rewritePathWithEnDashAndSpace() { + MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with–en–dashes and spaces") + .buildRequest(null); + + ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList()); + + ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request); + + assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%E2%80%93en%E2%80%93dashes%20and%20spaces"); + } + }