Browse Source

Decode servletPath in HtmlUnitRequestBuilder

Closes gh-27837
pull/27927/head
rstoyanchev 3 years ago
parent
commit
3477ec0a35
  1. 2
      spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
  2. 10
      spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java

2
spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java

@ -57,6 +57,7 @@ import org.springframework.util.ObjectUtils; @@ -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 { @@ -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);
}

10
spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java

@ -782,6 +782,16 @@ public class HtmlUnitRequestBuilderTests { @@ -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);

Loading…
Cancel
Save