Updated Branches: refs/heads/wicket-1.5.x 3d8368cf4 -> 031b5eb97
WICKET-4841 Return error code 400 when an Ajax request has no base url set in header/request parameters. Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/031b5eb9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/031b5eb9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/031b5eb9 Branch: refs/heads/wicket-1.5.x Commit: 031b5eb97c74f6c0908742a8ee4a4def4d2b72c7 Parents: 3d8368c Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Nov 5 11:26:42 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Nov 5 11:27:56 2012 +0200 ---------------------------------------------------------------------- .../protocol/http/servlet/ServletWebRequest.java | 9 +++- .../http/servlet/ServletWebRequestTest.java | 35 ++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/031b5eb9/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java index a0a6170..569ad94 100644 --- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java +++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java @@ -30,15 +30,16 @@ import java.util.Set; import javax.servlet.ServletRequest; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.wicket.protocol.http.RequestUtils; import org.apache.wicket.request.IRequestParameters; import org.apache.wicket.request.IWritableRequestParameters; import org.apache.wicket.request.Url; import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException; import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.lang.Bytes; -import org.apache.wicket.util.lang.Checks; import org.apache.wicket.util.string.PrependingStringBuffer; import org.apache.wicket.util.string.StringValue; import org.apache.wicket.util.string.Strings; @@ -168,7 +169,11 @@ public class ServletWebRequest extends WebRequest base = getRequestParameters().getParameterValue(PARAM_AJAX_BASE_URL).toString(null); } - Checks.notNull(base, "Current ajax request is missing the base url header or parameter"); + if (base == null) + { + throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST, + "Current ajax request is missing the base url header or parameter"); + } return setParameters(Url.parse(base, getCharset())); } http://git-wip-us.apache.org/repos/asf/wicket/blob/031b5eb9/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebRequestTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebRequestTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebRequestTest.java index fdfd171..394bcd7 100644 --- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebRequestTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebRequestTest.java @@ -17,6 +17,7 @@ package org.apache.wicket.protocol.http.servlet; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; @@ -26,6 +27,7 @@ import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.http.mock.MockHttpServletRequest; import org.apache.wicket.request.Url; import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.StringResourceStream; import org.apache.wicket.util.tester.WicketTester; @@ -130,7 +132,38 @@ public class ServletWebRequestTest extends Assert }; WicketTester tester = new WicketTester(application); - tester.startPage(new CustomRequestPage()); + try + { + tester.startPage(new CustomRequestPage()); + } + finally + { + tester.destroy(); + } + } + + /** + * Assert that ServletWebRequest#getClientUrl() will throw an AbortWithHttpErrorCodeException + * with error code 400 (Bad Request) when an Ajax request doesn't provide the base url. + * + * https://issues.apache.org/jira/browse/WICKET-4841 + */ + @Test + public void getClientUrlAjaxWithoutBaseUrl() + { + + MockHttpServletRequest httpRequest = new MockHttpServletRequest(null, null, null); + httpRequest.setHeader(ServletWebRequest.HEADER_AJAX, "true"); + ServletWebRequest webRequest = new ServletWebRequest(httpRequest, ""); + try + { + webRequest.getClientUrl(); + fail("Should not be possible to get the request client url in Ajax request without base url"); + } + catch (AbortWithHttpErrorCodeException awhex) + { + assertEquals(HttpServletResponse.SC_BAD_REQUEST, awhex.getErrorCode()); + } } private static class CustomRequestPage extends WebPage implements IMarkupResourceStreamProvider
