Merge branch '4.1.x' into 4.2.x

This commit is contained in:
Ryan Baxter
2025-03-20 13:41:12 -04:00
2 changed files with 51 additions and 2 deletions

View File

@@ -329,10 +329,10 @@ public abstract class BeforeFilterFunctions {
Pattern pattern = Pattern.compile(regexp);
return request -> {
MvcUtils.addOriginalRequestUrl(request, request.uri());
String path = request.uri().getRawPath();
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();

View File

@@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author raccoonback
* @author Jens Mallien
*/
class BeforeFilterFunctionsTests {
@@ -181,4 +182,52 @@ class BeforeFilterFunctionsTests {
assertThat(result.uri().toString()).hasToString("http://localhost/depth3?baz%5B%5D=qux%5B%5D");
}
@Test
void rewritePath() {
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get")
.buildRequest(null);
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
ServerRequest modified = BeforeFilterFunctions.rewritePath("get", "modified").apply(request);
assertThat(modified.uri().getRawPath()).isEqualTo("/modified");
}
@Test
void rewritePathWithSpace() {
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/with 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%20spaces");
}
@Test
void rewritePathWithEnDash() {
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/withendashes")
.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
void rewritePathWithEnDashAndSpace() {
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/get/path/withendashes 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");
}
}