Issue #8578 - Changes from review

Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
Joakim Erdfelt 2022-09-12 09:55:14 -05:00
parent a6a386a6cc
commit 8eba1c9924
No known key found for this signature in database
GPG Key ID: 2D0E1FB8FE4B68B4
2 changed files with 32 additions and 18 deletions

View File

@ -1278,12 +1278,7 @@ public class Request implements HttpServletRequest
@Override @Override
public String getRequestURI() public String getRequestURI()
{ {
if (_uri == null) return _uri == null ? null : _uri.getPath();
return null;
if (HttpMethod.CONNECT.is(getMethod()))
return _uri.getAuthority();
else
return _uri.getPath();
} }
@Override @Override
@ -1291,13 +1286,9 @@ public class Request implements HttpServletRequest
{ {
final StringBuffer url = new StringBuffer(128); final StringBuffer url = new StringBuffer(128);
URIUtil.appendSchemeHostPort(url, getScheme(), getServerName(), getServerPort()); URIUtil.appendSchemeHostPort(url, getScheme(), getServerName(), getServerPort());
// only add RequestURI if not a CONNECT method String path = getRequestURI();
if (!HttpMethod.CONNECT.is(getMethod())) if (path != null)
{ url.append(path);
String requestURI = getRequestURI();
if (requestURI != null)
url.append(requestURI);
}
return url; return url;
} }

View File

@ -858,14 +858,14 @@ public class RequestTest
} }
@Test @Test
public void testConnectRequestURL() throws Exception public void testConnectRequestURLSameAsHost() throws Exception
{ {
final AtomicReference<String> resultRequestURL = new AtomicReference<>(); final AtomicReference<String> resultRequestURL = new AtomicReference<>();
final AtomicReference<String> resultRequestURI = new AtomicReference<>(); final AtomicReference<String> resultRequestURI = new AtomicReference<>();
_handler._checker = (request, response) -> _handler._checker = (request, response) ->
{ {
resultRequestURL.set("" + request.getRequestURL()); resultRequestURL.set(request.getRequestURL().toString());
resultRequestURI.set("" + request.getRequestURI()); resultRequestURI.set(request.getRequestURI());
return true; return true;
}; };
@ -876,8 +876,31 @@ public class RequestTest
"\n"); "\n");
HttpTester.Response response = HttpTester.parseResponse(rawResponse); HttpTester.Response response = HttpTester.parseResponse(rawResponse);
assertThat(response.getStatus(), is(HttpStatus.OK_200)); assertThat(response.getStatus(), is(HttpStatus.OK_200));
assertThat(resultRequestURL.get(), is("http://myhost:9999")); assertThat("request.getRequestURL", resultRequestURL.get(), is("http://myhost:9999/"));
assertThat(resultRequestURI.get(), is("myhost:9999")); assertThat("request.getRequestURI", resultRequestURI.get(), is("/"));
}
@Test
public void testConnectRequestURLDifferentThanHost() throws Exception
{
final AtomicReference<String> resultRequestURL = new AtomicReference<>();
final AtomicReference<String> resultRequestURI = new AtomicReference<>();
_handler._checker = (request, response) ->
{
resultRequestURL.set(request.getRequestURL().toString());
resultRequestURI.set(request.getRequestURI());
return true;
};
String rawResponse = _connector.getResponse(
"CONNECT myhost:9999 HTTP/1.1\n" +
"Host: otherhost:8888\n" + // per spec, this is ignored if request-target is authority-form
"Connection: close\n" +
"\n");
HttpTester.Response response = HttpTester.parseResponse(rawResponse);
assertThat(response.getStatus(), is(HttpStatus.OK_200));
assertThat("request.getRequestURL", resultRequestURL.get(), is("http://myhost:9999/"));
assertThat("request.getRequestURI", resultRequestURI.get(), is("/"));
} }
@Test @Test