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());
        }
 
        /**

Reply via email to