Skip to content

Commit 6377e31

Browse files
committed
Merge branch '4.2.x'
2 parents 5456d6d + 7a6d1be commit 6377e31

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

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

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

0 commit comments

Comments
 (0)