You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jl...@apache.org on 2014/09/30 18:17:49 UTC

git commit: WICKET-5712 SecuritySettings.setEnforceMounts() does not work when the mounted mapper is not in the root compound mapper

Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 6501ab739 -> a05aa4cae


WICKET-5712 SecuritySettings.setEnforceMounts() does not work when the mounted mapper is not in the root compound mapper


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

Branch: refs/heads/wicket-6.x
Commit: a05aa4cae6145a707698fce9ef73885656589318
Parents: 6501ab7
Author: Jesse Long <jl...@apache.org>
Authored: Tue Sep 30 18:11:45 2014 +0200
Committer: Jesse Long <jl...@apache.org>
Committed: Tue Sep 30 18:11:45 2014 +0200

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


http://git-wip-us.apache.org/repos/asf/wicket/blob/a05aa4ca/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 284f003..3aa6cfb 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.mount.MountMapper;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
@@ -131,7 +132,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;
 							}
@@ -149,27 +150,40 @@ 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 MountMapper)
+			while (requestMapper instanceof IRequestMapperDelegate)
 			{
-				MountMapper mountMapper = (MountMapper) requestMapper;
-				requestMapper = mountMapper.getInnerRequestMapper();
+				requestMapper = ((IRequestMapperDelegate)requestMapper).getDelegateMapper();
 			}
 
-			if (requestMapper instanceof AbstractBookmarkableMapper  && requestMapper != this)
+			if (requestMapper instanceof ICompoundRequestMapper)
 			{
-				AbstractBookmarkableMapper mapper = (AbstractBookmarkableMapper) requestMapper;
-
-				if (mapper.checkPageClass(pageClass))
+				if (isPageMounted(pageClass, (ICompoundRequestMapper)requestMapper))
 				{
 					return true;
 				}
 			}
+			else
+			{
+				if (requestMapper instanceof MountMapper)
+				{
+					MountMapper mountMapper = (MountMapper) requestMapper;
+					requestMapper = mountMapper.getInnerRequestMapper();
+				}
+
+				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/a05aa4ca/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 7e5b2a2..f13db98 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
@@ -26,6 +26,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.Test;
 
@@ -72,6 +74,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());
 	}
 	
 	/**