Decode servletPath in HtmlUnitRequestBuilder

Closes gh-27837
This commit is contained in:
rstoyanchev 2022-01-11 14:54:14 +00:00
parent 9346c89f5c
commit 3477ec0a35
2 changed files with 12 additions and 0 deletions

View File

@ -57,6 +57,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriUtils;
/**
* Internal class used to transform a {@link WebRequest} into a
@ -262,6 +263,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
String path = uriComponents.getPath();
String requestPath = (path != null ? path : "");
String servletPath = requestPath.substring(request.getContextPath().length());
servletPath = UriUtils.decode(servletPath, StandardCharsets.UTF_8);
request.setServletPath(servletPath);
}

View File

@ -782,6 +782,16 @@ public class HtmlUnitRequestBuilderTests {
assertThat(actualRequest.getServletPath()).isEqualTo("/this/here");
}
@Test // gh-27837
public void buildRequestServletPathWithEncodedUrl() throws Exception {
webRequest.setUrl(new URL("http://localhost/test/Fr%C3%BChling%20Sommer%20Herbst%20Winter"));
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getRequestURI()).isEqualTo("/test/Fr%C3%BChling%20Sommer%20Herbst%20Winter");
assertThat(actualRequest.getServletPath()).isEqualTo("/Frühling Sommer Herbst Winter");
}
@Test
public void buildRequestSession() throws Exception {
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);