Skip to content

Commit 7a6d1be

Browse files
committed
Merge branch '4.1.x' into 4.2.x
2 parents fe3ea71 + b68c391 commit 7a6d1be

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,10 +329,10 @@ public static Function<ServerRequest, ServerRequest> rewritePath(String regexp,
329329
Pattern pattern = Pattern.compile(regexp);
330330
return request -> {
331331
MvcUtils.addOriginalRequestUrl(request, request.uri());
332-
String path = request.uri().getRawPath();
332+
String path = request.uri().getPath();
333333
String newPath = pattern.matcher(path).replaceAll(normalizedReplacement);
334334

335-
URI rewrittenUri = UriComponentsBuilder.fromUri(request.uri()).replacePath(newPath).build().toUri();
335+
URI rewrittenUri = UriComponentsBuilder.fromUri(request.uri()).replacePath(newPath).encode().build().toUri();
336336

337337
ServerRequest modified = ServerRequest.from(request).uri(rewrittenUri).build();
338338

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
/**
3030
* @author raccoonback
31+
* @author Jens Mallien
3132
*/
3233
class BeforeFilterFunctionsTests {
3334

@@ -181,4 +182,52 @@ void stripPrefixWithEncodedParameters() {
181182
assertThat(result.uri().toString()).hasToString("http://localhost/depth3?baz%5B%5D=qux%5B%5D");
182183
}
183184

185+
@Test
186+
void rewritePath() {
187+
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get")
188+
.buildRequest(null);
189+
190+
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
191+
192+
ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request);
193+
194+
assertThat(modified.uri().getRawPath()).isEqualTo("/modified");
195+
}
196+
197+
@Test
198+
void rewritePathWithSpace() {
199+
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with spaces")
200+
.buildRequest(null);
201+
202+
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
203+
204+
ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request);
205+
206+
assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%20spaces");
207+
}
208+
209+
@Test
210+
void rewritePathWithEnDash() {
211+
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with–en–dashes")
212+
.buildRequest(null);
213+
214+
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
215+
216+
ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request);
217+
218+
assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%E2%80%93en%E2%80%93dashes");
219+
}
220+
221+
@Test
222+
void rewritePathWithEnDashAndSpace() {
223+
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with–en–dashes and spaces")
224+
.buildRequest(null);
225+
226+
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
227+
228+
ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request);
229+
230+
assertThat(modified.uri().getRawPath()).isEqualTo("/modified/path/with%E2%80%93en%E2%80%93dashes%20and%20spaces");
231+
}
232+
184233
}

0 commit comments

Comments
 (0)