Repository: wicket
Updated Branches:
refs/heads/master 5837817c9 -> 145da0212
WICKET-5712 SecuritySettings.setEnforceMounts() does not work when the mounted
mapper is not in the root compound mapper
(cherry picked from commit a05aa4cae6145a707698fce9ef73885656589318)
Conflicts:
wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/145da021
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/145da021
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/145da021
Branch: refs/heads/master
Commit: 145da0212480f26b571208968e299abdfd951e2b
Parents: 5837817
Author: Jesse Long <[email protected]>
Authored: Tue Sep 30 18:11:45 2014 +0200
Committer: Jesse Long <[email protected]>
Committed: Tue Sep 30 18:45:58 2014 +0200
----------------------------------------------------------------------
.../core/request/mapper/BookmarkableMapper.java | 30 ++++++++++++++------
.../wicket/settings/ISecuritySettingsTest.java | 12 ++++++++
2 files changed, 34 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/145da021/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------
diff --git
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
index eca607b..bf1d888 100644
---
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
+++
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java
@@ -24,6 +24,7 @@ import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.ICompoundRequestMapper;
+import org.apache.wicket.request.mapper.IRequestMapperDelegate;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -119,7 +120,7 @@ public class BookmarkableMapper extends
AbstractBookmarkableMapper
if
(!pageClass.equals(application.getHomePage()))
{
// WICKET-5094 only
enforce mount if page is mounted
- if
(isPageMounted(pageClass, application))
+ if
(isPageMounted(pageClass, application.getRootRequestMapperAsCompound()))
{
return null;
}
@@ -137,21 +138,34 @@ public class BookmarkableMapper extends
AbstractBookmarkableMapper
return null;
}
- private boolean isPageMounted(Class<? extends IRequestablePage>
pageClass, Application application)
+ private boolean isPageMounted(Class<? extends IRequestablePage>
pageClass, ICompoundRequestMapper compoundMapper)
{
- ICompoundRequestMapper applicationMappers =
application.getRootRequestMapperAsCompound();
-
- for (IRequestMapper requestMapper : applicationMappers)
+ for (IRequestMapper requestMapper : compoundMapper)
{
- if (requestMapper instanceof AbstractBookmarkableMapper
&& requestMapper != this)
+ while (requestMapper instanceof IRequestMapperDelegate)
{
- AbstractBookmarkableMapper mapper =
(AbstractBookmarkableMapper) requestMapper;
+ requestMapper =
((IRequestMapperDelegate)requestMapper).getDelegateMapper();
+ }
- if (mapper.checkPageClass(pageClass))
+ if (requestMapper instanceof ICompoundRequestMapper)
+ {
+ if (isPageMounted(pageClass,
(ICompoundRequestMapper)requestMapper))
{
return true;
}
}
+ else
+ {
+ if (requestMapper instanceof
AbstractBookmarkableMapper && requestMapper != this)
+ {
+ AbstractBookmarkableMapper mapper =
(AbstractBookmarkableMapper) requestMapper;
+
+ if (mapper.checkPageClass(pageClass))
+ {
+ return true;
+ }
+ }
+ }
}
return false;
http://git-wip-us.apache.org/repos/asf/wicket/blob/145da021/wicket-core/src/test/java/org/apache/wicket/settings/ISecuritySettingsTest.java
----------------------------------------------------------------------
diff --git
a/wicket-core/src/test/java/org/apache/wicket/settings/ISecuritySettingsTest.java
b/wicket-core/src/test/java/org/apache/wicket/settings/ISecuritySettingsTest.java
index d0acb01..2f388e7 100644
---
a/wicket-core/src/test/java/org/apache/wicket/settings/ISecuritySettingsTest.java
+++
b/wicket-core/src/test/java/org/apache/wicket/settings/ISecuritySettingsTest.java
@@ -24,6 +24,8 @@ import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.https.HttpsConfig;
+import org.apache.wicket.protocol.https.HttpsMapper;
import org.apache.wicket.request.flow.RedirectToUrlException;
import org.junit.Assert;
import org.junit.Test;
@@ -71,6 +73,16 @@ public class ISecuritySettingsTest extends WicketTestCase
tester.assertRenderedPage(MockPageWithLink.class);
tester.clickLink(MockPageWithLink.LINK_ID);
Assert.assertNull(tester.getLastRenderedPage());
+
+ /*
+ * Test that mounts are enforced when the root compound mapper
does not directly contain the mounted mapper.
+ */
+ tester.getApplication().setRootRequestMapper(new
HttpsMapper(tester.getApplication().getRootRequestMapper(), new HttpsConfig()));
+
+ tester.startPage(pageWithLink);
+ tester.assertRenderedPage(MockPageWithLink.class);
+ tester.clickLink(MockPageWithLink.LINK_ID);
+ Assert.assertNull(tester.getLastRenderedPage());
}
/**