UrlHandlerFilter should not strip slash for "/" request paths

This commit ensures that the `UrlHandlerFilter` does not handle "/"
paths in general, as they should not be altered and are meaningful for
web applications.

Closes gh-33444
This commit is contained in:
Brian Clozel
2024-09-02 15:29:42 +02:00
parent 69d5587f53
commit be5d5fa52d
2 changed files with 18 additions and 1 deletions

View File

@@ -69,6 +69,23 @@ public class UrlHandlerFilterTests {
assertThat(actual.getPathInfo()).isEqualTo(pathInfo);
}
@Test
void shouldNotSkipTrailingSlashForRootPath() throws Exception {
UrlHandlerFilter filter = UrlHandlerFilter.trailingSlashHandler("/**").wrapRequest().build();
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/");
request.setPathInfo("/");
MockFilterChain chain = new MockFilterChain();
filter.doFilterInternal(request, new MockHttpServletResponse(), chain);
HttpServletRequest actual = (HttpServletRequest) chain.getRequest();
assertThat(actual).isNotNull().isSameAs(request);
assertThat(actual.getRequestURI()).isEqualTo("/");
assertThat(actual.getRequestURL().toString()).isEqualTo("http://localhost/");
assertThat(actual.getServletPath()).isEqualTo("");
assertThat(actual.getPathInfo()).isEqualTo("/");
}
@Test
void noTrailingSlashWithRequestWrapping() throws Exception {
testNoTrailingSlashWithRequestWrapping("/path/**", "/path/123");