Merge branch 'jetty-9.4.x' into jetty-10.0.x
This commit is contained in:
commit
90ca8063eb
|
@ -31,13 +31,18 @@ import javax.servlet.ServletResponse;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.eclipse.jetty.http.BadMessageException;
|
||||
import org.eclipse.jetty.http.HttpURI;
|
||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||
import org.eclipse.jetty.util.Attributes;
|
||||
import org.eclipse.jetty.util.MultiMap;
|
||||
import org.eclipse.jetty.util.log.Log;
|
||||
import org.eclipse.jetty.util.log.Logger;
|
||||
|
||||
public class Dispatcher implements RequestDispatcher
|
||||
{
|
||||
private static final Logger LOG = Log.getLogger(Dispatcher.class);
|
||||
|
||||
public final static String __ERROR_DISPATCH="org.eclipse.jetty.server.Dispatcher.ERROR";
|
||||
|
||||
/** Dispatch include attribute names */
|
||||
|
@ -195,8 +200,27 @@ public class Dispatcher implements RequestDispatcher
|
|||
baseRequest.setContextPath(_contextHandler.getContextPath());
|
||||
baseRequest.setServletPath(null);
|
||||
baseRequest.setPathInfo(_pathInContext);
|
||||
if (_uri.getQuery()!=null || old_uri.getQuery()!=null)
|
||||
baseRequest.mergeQueryParameters(old_uri.getQuery(),_uri.getQuery(), true);
|
||||
|
||||
if (_uri.getQuery() != null || old_uri.getQuery() != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
baseRequest.mergeQueryParameters(old_uri.getQuery(), _uri.getQuery(), true);
|
||||
}
|
||||
catch (BadMessageException e)
|
||||
{
|
||||
// Only throw BME if not in Error Dispatch Mode
|
||||
// This allows application ErrorPageErrorHandler to handle BME messages
|
||||
if (dispatch != DispatcherType.ERROR)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG.warn("Ignoring Original Bad Request Query String: " + old_uri, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
baseRequest.setAttributes(attr);
|
||||
|
||||
|
|
|
@ -65,12 +65,15 @@ public class ErrorPageTest
|
|||
context.addServlet(FailClosedServlet.class, "/fail-closed/*");
|
||||
context.addServlet(ErrorServlet.class, "/error/*");
|
||||
context.addServlet(AppServlet.class, "/app/*");
|
||||
context.addServlet(LongerAppServlet.class, "/longer.app/*");
|
||||
|
||||
ErrorPageErrorHandler error = new ErrorPageErrorHandler();
|
||||
context.setErrorHandler(error);
|
||||
error.addErrorPage(599,"/error/599");
|
||||
error.addErrorPage(400,"/error/400");
|
||||
// error.addErrorPage(500,"/error/500");
|
||||
error.addErrorPage(IllegalStateException.class.getCanonicalName(),"/error/TestException");
|
||||
error.addErrorPage(BadMessageException.class,"/error/TestException");
|
||||
error.addErrorPage(BadMessageException.class,"/error/BadMessageException");
|
||||
error.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE,"/error/GlobalErrorPage");
|
||||
|
||||
_server.start();
|
||||
|
@ -89,7 +92,6 @@ public class ErrorPageTest
|
|||
public void testSendErrorClosedResponse() throws Exception
|
||||
{
|
||||
String response = _connector.getResponse("GET /fail-closed/ HTTP/1.0\r\n\r\n");
|
||||
System.out.println(response);
|
||||
assertThat(response,Matchers.containsString("HTTP/1.1 599 599"));
|
||||
assertThat(response,Matchers.containsString("DISPATCH: ERROR"));
|
||||
assertThat(response,Matchers.containsString("ERROR_PAGE: /599"));
|
||||
|
@ -162,28 +164,39 @@ public class ErrorPageTest
|
|||
|
||||
@Test
|
||||
public void testBadMessage() throws Exception
|
||||
{
|
||||
try (StacklessLogging ignore = new StacklessLogging(Dispatcher.class))
|
||||
{
|
||||
String response = _connector.getResponse("GET /app?baa=%88%A4 HTTP/1.0\r\n\r\n");
|
||||
assertThat(response, Matchers.containsString("HTTP/1.1 400 Unable to parse URI query"));
|
||||
assertThat(response, Matchers.containsString("ERROR_PAGE: /TestException"));
|
||||
assertThat(response, Matchers.containsString("ERROR_MESSAGE: Unable to parse URI query"));
|
||||
assertThat(response, Matchers.containsString("HTTP/1.1 400 Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_PAGE: /BadMessageException"));
|
||||
assertThat(response, Matchers.containsString("ERROR_MESSAGE: Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_CODE: 400"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION: org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION: org.eclipse.jetty.http.BadMessageException: 400: Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION_TYPE: class org.eclipse.jetty.http.BadMessageException"));
|
||||
assertThat(response, Matchers.containsString("ERROR_SERVLET: org.eclipse.jetty.servlet.ErrorPageTest$AppServlet-"));
|
||||
assertThat(response, Matchers.containsString("ERROR_REQUEST_URI: /app"));
|
||||
assertThat(response, Matchers.containsString("getParameterMap()= {}"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class AppServlet extends HttpServlet implements Servlet
|
||||
{
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
request.getRequestDispatcher("/longer.app/").forward(request, response);
|
||||
}
|
||||
}
|
||||
|
||||
public static class LongerAppServlet extends HttpServlet implements Servlet
|
||||
{
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.println(request.getRequestURI());
|
||||
writer.println(request.getParameterMap().toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
<plugin>
|
||||
<groupId>com.github.joelittlejohn.embedmongo</groupId>
|
||||
<artifactId>embedmongo-maven-plugin</artifactId>
|
||||
<version>0.3.5</version>
|
||||
<version>0.4.1</version>
|
||||
<configuration>
|
||||
<!--port>37017</port-->
|
||||
<!-- allocates a random port and overrides embedmongo.port -->
|
||||
|
@ -137,6 +137,8 @@
|
|||
<!--storageEngine>wiredTiger</storageEngine-->
|
||||
<!-- optional, skips this plugin entirely, use on the command line like -Dembedmongo.skip -->
|
||||
<skip>false</skip>
|
||||
<downloadPath>https://jenkins.webtide.net/userContent/</downloadPath>
|
||||
<version>2.2.1</version>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
|
|
Loading…
Reference in New Issue