You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2014/01/16 11:53:17 UTC

svn commit: r1558749 - in /sling/trunk/bundles/resourceresolver/src: main/java/org/apache/sling/resourceresolver/impl/tree/ test/java/org/apache/sling/resourceresolver/impl/ test/java/org/apache/sling/resourceresolver/impl/tree/

Author: cziegeler
Date: Thu Jan 16 10:53:17 2014
New Revision: 1558749

URL: http://svn.apache.org/r1558749
Log:
SLING-2698 - resource access security service for resource providers. Distinguish between context application and provider

Modified:
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java?rev=1558749&r1=1558748&r2=1558749&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java Thu Jan 16 10:53:17 2014
@@ -32,6 +32,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.security.ResourceAccessSecurity;
 import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
 import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
 import org.osgi.framework.Constants;
 
@@ -114,19 +115,19 @@ public abstract class ProviderHandler im
      * applies resource access security if configured
      */
     protected Resource getReadableResource ( final ResourceResolverContext ctx, Resource resource ) {
-        Resource returnValue = null;
+        final ResourceAccessSecurityTracker tracker = ctx.getResourceAccessSecurityTracker();
 
-        if (useResourceAccessSecurity && resource != null) {
-            final ResourceAccessSecurity resourceAccessSecurity = ctx.getResourceAccessSecurityTracker().getProviderResourceAccessSecurity();
+        Resource returnValue = resource;
+
+        if (useResourceAccessSecurity && tracker != null && returnValue != null) {
+            final ResourceAccessSecurity resourceAccessSecurity = tracker.getProviderResourceAccessSecurity();
             if (resourceAccessSecurity != null) {
                 returnValue = resourceAccessSecurity.getReadableResource(resource);
             }
-        } else {
-            returnValue = resource;
         }
 
-        if ( returnValue != null ) {
-            final ResourceAccessSecurity resourceAccessSecurity = ctx.getResourceAccessSecurityTracker().getApplicationResourceAccessSecurity();
+        if ( returnValue != null && tracker != null ) {
+            final ResourceAccessSecurity resourceAccessSecurity = tracker.getApplicationResourceAccessSecurity();
             if (resourceAccessSecurity != null) {
                 returnValue = resourceAccessSecurity.getReadableResource(resource);
             }

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java?rev=1558749&r1=1558748&r2=1558749&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java Thu Jan 16 10:53:17 2014
@@ -478,7 +478,7 @@ public class MockedResourceResolverImplT
         // test path mapping without a request.
         path = resourceResolver.map("/factory/test");
         Assert.assertEquals("/factory/test", path);
-        
+
         buildResource("/content", EMPTY_RESOURCE_LIST, resourceResolver, factoryResourceProvider);
         path = resourceResolver.map("/content.html");
         Assert.assertEquals("/content.html", path);

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java?rev=1558749&r1=1558748&r2=1558749&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java Thu Jan 16 10:53:17 2014
@@ -32,6 +32,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -54,16 +55,20 @@ public class ResourceProviderEntryTest {
 
     @Test public void testRootProvider() {
         assertNull(root.getResource(null, null, "relpath"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/rootel"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/rootel/child"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/apps/sling/sample/html.js"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null,
+        final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
+        Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/child"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/apps/sling/sample/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
             "/apps/sling/microsling/html.js"));
     }
 
     @Test public void testAdd1Provider() {
         String firstPath = "/rootel";
+        final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
+        Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
         final ResourceResolver resolver = Mockito.mock(ResourceResolver.class);
         final ResourceProvider first = Mockito.mock(ResourceProvider.class);
         Mockito.when(first.getResource(Mockito.any(ResourceResolver.class), Mockito.startsWith(firstPath))).thenReturn(new TestResource(resolver));
@@ -73,14 +78,14 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(resolver, root.getResource(null, null, "/rootel"));
-        assertEqualsResolver(resolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(resolver, root.getResource(null, null, "/rootel/child"));
-        assertEqualsResolver(resolver, root.getResource(null, null, "/rootel/child/html.js"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null,
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel"));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child"));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
             "/apps/sling/sample/html.js"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null,
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
             "/apps/sling/microsling/html.js"));
     }
 
@@ -89,6 +94,8 @@ public class ResourceProviderEntryTest {
         String thirdPath = "/apps/sling/sample";
         String secondPath = firstPath + "/child";
 
+        final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
+        Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
         final ResourceResolver firstResolver = Mockito.mock(ResourceResolver.class);
         final ResourceProvider first = Mockito.mock(ResourceProvider.class);
         Mockito.when(first.getResource(Mockito.any(ResourceResolver.class), Mockito.startsWith(firstPath))).thenReturn(new TestResource(firstResolver));
@@ -110,14 +117,14 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js"));
         assertEqualsResolver(thirdResolver,
-            root.getResource(null, null, "/apps/sling/sample/html.js"));
-        final Resource resource = root.getResource(null, null,
+            root.getResource(ctx, null, "/apps/sling/sample/html.js"));
+        final Resource resource = root.getResource(ctx, null,
             "/apps/sling/microsling/html.js");
         assertEqualsResolver(this.rootResolver, resource);
     }
@@ -127,6 +134,8 @@ public class ResourceProviderEntryTest {
         String thirdPath = "/apps/sling/sample";
         String secondPath = firstPath + "/child";
 
+        final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
+        Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
         final ResourceResolver firstResolver = Mockito.mock(ResourceResolver.class);
         final ResourceProvider first = Mockito.mock(ResourceProvider.class);
         Mockito.when(first.getResource(Mockito.any(ResourceResolver.class), Mockito.startsWith(firstPath))).thenReturn(new TestResource(firstResolver));
@@ -148,14 +157,14 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js"));
         assertEqualsResolver(thirdResolver,
-           root.getResource(null, null, "/apps/sling/sample/html.js"));
-        Resource resource = root.getResource(null, null,
+           root.getResource(ctx, null, "/apps/sling/sample/html.js"));
+        Resource resource = root.getResource(ctx, null,
               "/apps/sling/microsling/html.js");
         assertEqualsResolver(this.rootResolver, resource);
     }
@@ -165,6 +174,8 @@ public class ResourceProviderEntryTest {
         String thirdPath = "/apps/sling/sample";
         String secondPath = firstPath + "/child";
 
+        final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
+        Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
         final ResourceResolver firstResolver = Mockito.mock(ResourceResolver.class);
         final ResourceProvider first = Mockito.mock(ResourceProvider.class);
         Mockito.when(first.getResource(Mockito.any(ResourceResolver.class), Mockito.startsWith(firstPath))).thenReturn(new TestResource(firstResolver));
@@ -186,22 +197,22 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js"));
 
         root.removeResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/rootel/sddsf/sdfsdf/html.js"));
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/sddsf/sdfsdf/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js"));
 
         root.addResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(null, null, "/"));
-        assertEqualsResolver(firstResolver, root.getResource(null, null, "/rootel/html.js"));
-        assertEqualsResolver(secondResolver, root.getResource(null, null, "/rootel/child/html.js"));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/"));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js"));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js"));
     }
 
     @Test public void testRemoveTheOnlyProvider() {
@@ -211,21 +222,23 @@ public class ResourceProviderEntryTest {
         for(String path : new String[] { "/foo", "/", "/foo/bar" }) {
             final ResourceResolver resolver = Mockito.mock(ResourceResolver.class);
             final ResourceProvider p = Mockito.mock(ResourceProvider.class);
+            final ResourceResolverContext ctx = Mockito.mock(ResourceResolverContext.class);
             Mockito.when(p.getResource(Mockito.any(ResourceResolver.class), Mockito.startsWith(path))).thenReturn(new TestResource(resolver));
+            Mockito.when(ctx.getResourceAccessSecurityTracker()).thenReturn(null);
 
             final Map<String, Object> props = new HashMap<String, Object>();
             props.put(Constants.SERVICE_ID, ++counter);
 
             e.addResourceProvider(path, new ResourceProviderHandler(p, props));
             {
-                final Resource r = e.getResource(null, null, path);
+                final Resource r = e.getResource(ctx, null, path);
                 assertEqualsResolver(resolver, r);
                 assertFalse(r instanceof SyntheticResource);
             }
 
             e.removeResourceProvider(path, new ResourceProviderHandler(p, props));
             {
-                final Resource r = e.getResource(null, null, path);
+                final Resource r = e.getResource(ctx, null, path);
                 // If our provider is indeed gone, we should get one of the following conditions
                 if(r == null) {
                     //fine
@@ -275,7 +288,8 @@ public class ResourceProviderEntryTest {
             return null;
         }
 
-		public boolean hasChildren() {
+		@Override
+        public boolean hasChildren() {
 			return false;
 		}
     }