Index: src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java (revision 1822631) +++ src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java (working copy) @@ -59,6 +59,7 @@ import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferenceCardinality; import org.osgi.service.metatype.annotations.AttributeDefinition; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; @@ -116,8 +117,10 @@ int configurationRanking() default 100; } - @Reference - private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider(); + @Reference( + cardinality = ReferenceCardinality.OPTIONAL + ) + private volatile MountInfoProvider mountInfoProvider; public AuthorizationConfigurationImpl() { super(); @@ -150,6 +153,7 @@ @Nonnull @Override public WorkspaceInitializer getWorkspaceInitializer() { + final MountInfoProvider mountInfoProvider = getMountInfoProvider(); return new AuthorizationInitializer(mountInfoProvider); } @@ -156,6 +160,7 @@ @Nonnull @Override public List getCommitHooks(@Nonnull String workspaceName) { + final MountInfoProvider mountInfoProvider = getMountInfoProvider(); return ImmutableList.of( new VersionablePathHook(workspaceName), new PermissionHook(workspaceName, getRestrictionProvider(), mountInfoProvider, getRootProvider(), getTreeProvider())); @@ -200,6 +205,8 @@ @Nonnull Set principals) { Context ctx = getSecurityProvider().getConfiguration(AuthorizationConfiguration.class).getContext(); + final MountInfoProvider mountInfoProvider = getMountInfoProvider(); + if (mountInfoProvider.hasNonDefaultMounts()) { return new MountPermissionProvider(root, workspaceName, principals, getRestrictionProvider(), getParameters(), ctx, mountInfoProvider, getRootProvider()); @@ -209,11 +216,12 @@ } } - public void bindMountInfoProvider(MountInfoProvider mountInfoProvider) { - this.mountInfoProvider = mountInfoProvider; + private MountInfoProvider getMountInfoProvider() { + if (mountInfoProvider != null) { + return mountInfoProvider; + } else { + return Mounts.defaultMountInfoProvider(); + } } - public void unbindMountInfoProvider(MountInfoProvider mountInfoProvider) { - this.mountInfoProvider = null; - } } Index: src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderRandomTestIT.java =================================================================== --- src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderRandomTestIT.java (revision 1822631) +++ src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderRandomTestIT.java (working copy) @@ -21,6 +21,7 @@ import javax.annotation.Nonnull; +import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl; import org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration; @@ -58,8 +59,12 @@ SecurityProvider sp = new SecurityProviderBuilder().build(); AuthorizationConfiguration acConfig = sp.getConfiguration(AuthorizationConfiguration.class); Assert.assertTrue(acConfig instanceof CompositeAuthorizationConfiguration); - ((AuthorizationConfigurationImpl) ((CompositeAuthorizationConfiguration) acConfig).getDefaultConfig()) - .bindMountInfoProvider(mountInfoProvider); + final AuthorizationConfigurationImpl authorizationConfiguration = ((AuthorizationConfigurationImpl) ((CompositeAuthorizationConfiguration) acConfig).getDefaultConfig()); + try { + FieldUtils.writeDeclaredField(authorizationConfiguration, "mountInfoProvider", mountInfoProvider, true); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } PermissionProvider composite = acConfig.getPermissionProvider(root, workspaceName, principals); Assert.assertTrue(composite instanceof MountPermissionProvider); return composite; Index: src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderTest.java (revision 1822631) +++ src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProviderTest.java (working copy) @@ -24,6 +24,7 @@ import javax.jcr.security.AccessControlManager; +import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.api.security.JackrabbitAccessControlList; import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; @@ -81,8 +82,12 @@ SecurityProvider sp = super.initSecurityProvider(); AuthorizationConfiguration acConfig = sp.getConfiguration(AuthorizationConfiguration.class); Assert.assertTrue(acConfig instanceof CompositeAuthorizationConfiguration); - ((AuthorizationConfigurationImpl) ((CompositeAuthorizationConfiguration) acConfig).getDefaultConfig()) - .bindMountInfoProvider(mountInfoProvider); + final AuthorizationConfigurationImpl authorizationConfiguration = ((AuthorizationConfigurationImpl) ((CompositeAuthorizationConfiguration) acConfig).getDefaultConfig()); + try { + FieldUtils.writeDeclaredField(authorizationConfiguration, "mountInfoProvider", mountInfoProvider, true); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } return sp; }