Updated Branches: refs/heads/master 0f9349b62 -> ccd746419
WICKET-4659: preventing exceptional responses from being cached and overlay next requests replay on the same address Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ccd74641 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ccd74641 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ccd74641 Branch: refs/heads/master Commit: ccd746419bd803e1b801aea0dd50d3b01b022ec4 Parents: 0f9349b Author: Pedro Santos <[email protected]> Authored: Tue Jul 17 04:40:09 2012 -0300 Committer: Pedro Santos <[email protected]> Committed: Tue Jul 17 04:40:09 2012 -0300 ---------------------------------------------------------------------- .../org/apache/wicket/DefaultExceptionMapper.java | 18 ++++++++++---- .../apache/wicket/DefaultExceptionMapperTest.java | 17 ++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/ccd74641/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java b/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java index 1a787ea..eea361d 100644 --- a/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java @@ -17,21 +17,23 @@ package org.apache.wicket; import org.apache.wicket.authorization.AuthorizationException; +import org.apache.wicket.core.request.handler.IPageRequestHandler; +import org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException; +import org.apache.wicket.core.request.handler.PageProvider; +import org.apache.wicket.core.request.handler.RenderPageRequestHandler; +import org.apache.wicket.core.request.mapper.StalePageException; import org.apache.wicket.markup.html.pages.ExceptionErrorPage; import org.apache.wicket.protocol.http.PageExpiredException; import org.apache.wicket.protocol.http.servlet.ResponseIOException; import org.apache.wicket.request.IExceptionMapper; import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.Request; +import org.apache.wicket.request.Response; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.handler.EmptyRequestHandler; -import org.apache.wicket.core.request.handler.IPageRequestHandler; -import org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException; -import org.apache.wicket.core.request.handler.PageProvider; -import org.apache.wicket.core.request.handler.RenderPageRequestHandler; import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.WebResponse; import org.apache.wicket.request.http.handler.ErrorCodeRequestHandler; -import org.apache.wicket.core.request.mapper.StalePageException; import org.apache.wicket.settings.IExceptionSettings; import org.apache.wicket.settings.IExceptionSettings.UnexpectedExceptionDisplay; import org.slf4j.Logger; @@ -51,6 +53,12 @@ public class DefaultExceptionMapper implements IExceptionMapper { try { + Response response = RequestCycle.get().getResponse(); + if (response instanceof WebResponse) + { + // we don't wan't to cache an exceptional reply in the browser + ((WebResponse)response).disableCaching(); + } return internalMap(e); } catch (RuntimeException e2) http://git-wip-us.apache.org/repos/asf/wicket/blob/ccd74641/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java index fb544cf..3e5dac5 100644 --- a/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java @@ -16,6 +16,9 @@ */ package org.apache.wicket; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import javax.servlet.http.HttpServletResponse; import org.apache.wicket.markup.IMarkupResourceStreamProvider; @@ -23,6 +26,7 @@ import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.mock.MockApplication; import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.http.WebResponse; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.settings.IExceptionSettings; import org.apache.wicket.util.resource.IResourceStream; @@ -50,6 +54,19 @@ public class DefaultExceptionMapperTest extends WicketTestCase } /** + * <a href="https://issues.apache.org/jira/browse/WICKET-4659">WICKET-4659</a> + */ + @Test + public void shouldDisableCaching() + { + WebResponse response = mock(WebResponse.class); + tester.getRequestCycle().setResponse(response); + new DefaultExceptionMapper().map(mock(Exception.class)); + verify(response).disableCaching(); + tester.destroy(); + } + + /** * <a href="https://issues.apache.org/jira/browse/WICKET-3520">WICKET-3520</a> */ @Test
