Updated Branches:
  refs/heads/wicket-1.5.x 2a7ba5ef1 -> 34735e027

WICKET-5094 enforce mount for mounted pages only


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/34735e02
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/34735e02
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/34735e02

Branch: refs/heads/wicket-1.5.x
Commit: 34735e027071bba98100f3fc291c667959b46eee
Parents: 2a7ba5e
Author: svenmeier <[email protected]>
Authored: Tue Mar 12 15:26:49 2013 +0100
Committer: svenmeier <[email protected]>
Committed: Tue Mar 12 15:26:49 2013 +0100

----------------------------------------------------------------------
 .../wicket/request/mapper/BookmarkableMapper.java  |   29 +++++++++++----
 .../wicket/settings/ISecuritySettingsTest.java     |    8 ++++
 2 files changed, 29 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/34735e02/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
index 759f389..eb917e1 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
@@ -20,6 +20,8 @@ import org.apache.wicket.Application;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.handler.PageProvider;
+import org.apache.wicket.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -91,14 +93,6 @@ public class BookmarkableMapper extends 
AbstractBookmarkableMapper
        @Override
        protected UrlInfo parseRequest(Request request)
        {
-               if (Application.exists())
-               {
-                       if 
(Application.get().getSecuritySettings().getEnforceMounts())
-                       {
-                               return null;
-                       }
-               }
-
                Url url = request.getUrl();
                if (matches(url))
                {
@@ -111,6 +105,25 @@ public class BookmarkableMapper extends 
AbstractBookmarkableMapper
 
                        if (pageClass != null && 
IRequestablePage.class.isAssignableFrom(pageClass))
                        {
+                               if (Application.exists())
+                               {
+                                       Application application = 
Application.get();
+
+                                       if 
(application.getSecuritySettings().getEnforceMounts())
+                                       {
+                                               // we make an excepion if the 
homepage itself was mounted, see WICKET-1898
+                                               if 
(!pageClass.equals(application.getHomePage()))
+                                               {
+                                                       // WICKET-5094 only 
enforce mount if page is mounted
+                                                       Url reverseUrl = 
application.getRootRequestMapper().mapHandler(
+                                                               new 
RenderPageRequestHandler(new PageProvider(pageClass)));
+                                                       if 
(!matches(reverseUrl))
+                                                       {
+                                                               return null;
+                                                       }
+                                               }
+                                       }
+                               }
 
                                // extract the PageParameters from URL if there 
are any
                                PageParameters pageParameters = 
extractPageParameters(request, 3,

http://git-wip-us.apache.org/repos/asf/wicket/blob/34735e02/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 ddcde75..7822531 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
@@ -58,6 +58,14 @@ public class ISecuritySettingsTest extends WicketTestCase
                tester.assertRenderedPage(UnknownPage.class);
 
                
tester.getApplication().getSecuritySettings().setEnforceMounts(true);
+
+               tester.startPage(pageWithLink);
+               tester.assertRenderedPage(MockPageWithLink.class);
+               tester.clickLink(MockPageWithLink.LINK_ID);
+               tester.assertRenderedPage(UnknownPage.class);
+
+               tester.getApplication().mountPackage("unknown", 
UnknownPage.class);
+
                tester.startPage(pageWithLink);
                tester.assertRenderedPage(MockPageWithLink.class);
                tester.clickLink(MockPageWithLink.LINK_ID);

Reply via email to