Avoid double encoding URI in ServletServerHttpRequest
Issue: SPR-13876
This commit is contained in:
committed by
Rossen Stoyanchev
parent
a5f4aa6824
commit
5185953f29
@@ -88,9 +88,12 @@ public class ServletServerHttpRequest implements ServerHttpRequest {
|
||||
@Override
|
||||
public URI getURI() {
|
||||
try {
|
||||
return new URI(this.servletRequest.getScheme(), null, this.servletRequest.getServerName(),
|
||||
this.servletRequest.getServerPort(), this.servletRequest.getRequestURI(),
|
||||
this.servletRequest.getQueryString(), null);
|
||||
StringBuffer url = this.servletRequest.getRequestURL();
|
||||
String queryStr = this.servletRequest.getQueryString();
|
||||
if (StringUtils.hasText(queryStr)) {
|
||||
url.append('?').append(queryStr);
|
||||
}
|
||||
return new URI(url.toString());
|
||||
}
|
||||
catch (URISyntaxException ex) {
|
||||
throw new IllegalStateException("Could not get HttpServletRequest URI: " + ex.getMessage(), ex);
|
||||
|
||||
@@ -56,13 +56,16 @@ public class ServletServerHttpRequestTests {
|
||||
|
||||
@Test
|
||||
public void getURI() throws Exception {
|
||||
URI uri = new URI("http://example.com/path?query");
|
||||
mockRequest.setServerName(uri.getHost());
|
||||
mockRequest.setServerPort(uri.getPort());
|
||||
mockRequest.setRequestURI(uri.getPath());
|
||||
mockRequest.setQueryString(uri.getQuery());
|
||||
assertEquals("Invalid uri", uri, request.getURI());
|
||||
}
|
||||
URI uri = new URI("https://example.com/%E4%B8%AD%E6%96%87?redirect=https%3A%2F%2Fgithub.com%2Fspring-projects%2Fspring-framework");
|
||||
mockRequest.setScheme(uri.getScheme());
|
||||
mockRequest.setServerName(uri.getHost());
|
||||
mockRequest.setServerPort(uri.getPort());
|
||||
// NOTE: should use getRawPath() instead of getPath() is decoded, while HttpServletRequest.setRequestURI() is encoded
|
||||
mockRequest.setRequestURI(uri.getRawPath());
|
||||
// NOTE: should use getRawQuery() instead of getQuery() is decoded, while HttpServletRequest.getQueryString() is encoded
|
||||
mockRequest.setQueryString(uri.getRawQuery());
|
||||
assertEquals("Invalid uri", uri, request.getURI());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getHeaders() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user