Author: stillalex
Date: Mon Mar 19 20:08:56 2018
New Revision: 1827239

URL: http://svn.apache.org/viewvc?rev=1827239&view=rev
Log:
OAK-7024 java.security.acl deprecated in Java 10, marked for removal in Java 11


Added:
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java
   (with props)
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java
   (with props)
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
    
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
    
jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
    
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java
    
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java
    jackrabbit/oak/trunk/oak-security-spi/pom.xml
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java
    
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModuleTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImplTest.java
    
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/TestPrincipalProvider.java

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.text.ParseException;
 import java.util.Collection;
 import java.util.Collections;
@@ -41,6 +40,8 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Sets;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -59,6 +60,7 @@ import org.apache.jackrabbit.oak.plugins
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.basic.DefaultSyncConfig;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalIdentityConstants;
+import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
@@ -69,7 +71,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of the {@code PrincipalProvider} interface that exposes
- * 'external' principals of type {@link java.security.acl.Group}. 'External'
+ * 'external' principals of type {@link 
org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipal}. 'External'
  * refers to the fact that these principals are defined and managed by an
  * {@link 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityProvider}.
  *
@@ -125,8 +127,8 @@ class ExternalGroupPrincipalProvider imp
 
     @Nonnull
     @Override
-    public Set<Group> getGroupMembership(@Nonnull Principal principal) {
-        if (!(principal instanceof Group)) {
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
+        if (!GroupPrincipals.isGroup(principal)) {
             try {
                 if (principal instanceof ItemBasedPrincipal) {
                     Tree t = root.getTree(((ItemBasedPrincipal) 
principal).getPath());
@@ -183,7 +185,7 @@ class ExternalGroupPrincipalProvider imp
         }
     }
 
-    private Set<Group> getGroupPrincipals(@CheckForNull Authorizable 
authorizable) throws RepositoryException {
+    private Set<Principal> getGroupPrincipals(@CheckForNull Authorizable 
authorizable) throws RepositoryException {
         if (authorizable != null && !authorizable.isGroup()) {
             Tree userTree = root.getTree(authorizable.getPath());
             return getGroupPrincipals(userTree);
@@ -192,12 +194,12 @@ class ExternalGroupPrincipalProvider imp
         }
     }
 
-    private Set<Group> getGroupPrincipals(@Nonnull Tree userTree) {
+    private Set<Principal> getGroupPrincipals(@Nonnull Tree userTree) {
         if (userTree.exists() && UserUtil.isType(userTree, 
AuthorizableType.USER) && userTree.hasProperty(REP_EXTERNAL_PRINCIPAL_NAMES)) {
             PropertyState ps = 
userTree.getProperty(REP_EXTERNAL_PRINCIPAL_NAMES);
             if (ps != null) {
                 // we have an 'external' user that has been synchronized with 
the dynamic-membership option
-                Set<Group> groupPrincipals = Sets.newHashSet();
+                Set<Principal> groupPrincipals = Sets.newHashSet();
                 for (String principalName : ps.getValue(Type.STRINGS)) {
                     groupPrincipals.add(new 
ExternalGroupPrincipal(principalName));
                 }
@@ -270,7 +272,7 @@ class ExternalGroupPrincipalProvider imp
      * identities that are <strong>not</strong> represented as authorizable 
group
      * in the repository's user management.
      */
-    private final class ExternalGroupPrincipal extends PrincipalImpl 
implements java.security.acl.Group {
+    private final class ExternalGroupPrincipal extends PrincipalImpl 
implements GroupPrincipal {
 
         private ExternalGroupPrincipal(String principalName) {
             super(principalName);
@@ -278,26 +280,8 @@ class ExternalGroupPrincipalProvider imp
         }
 
         @Override
-        public boolean addMember(Principal user) {
-            if (isMember(user)) {
-                return false;
-            } else {
-                throw new UnsupportedOperationException("Adding members to 
external group principals is not supported.");
-            }
-        }
-
-        @Override
-        public boolean removeMember(Principal user) {
-            if (!isMember(user)) {
-                return false;
-            } else {
-                throw new UnsupportedOperationException("Removing members from 
external group principals is not supported.");
-            }
-        }
-
-        @Override
         public boolean isMember(Principal member) {
-            if (member instanceof Group) {
+            if (GroupPrincipals.isGroup(member)) {
                 return false;
             }
             try {
@@ -438,35 +422,35 @@ class ExternalGroupPrincipalProvider imp
     private final class AutoMembershipPrincipals {
 
         private final Map<String, String[]> autoMembershipMapping;
-        private final Map<String, Set<Group>> principalMap;
+        private final Map<String, Set<Principal>> principalMap;
 
         private AutoMembershipPrincipals(@Nonnull Map<String, String[]> 
autoMembershipMapping) {
             this.autoMembershipMapping = autoMembershipMapping;
-            this.principalMap = new ConcurrentHashMap<String, 
Set<Group>>(autoMembershipMapping.size());
+            this.principalMap = new ConcurrentHashMap<String, 
Set<Principal>>(autoMembershipMapping.size());
         }
 
         @Nonnull
-        private Collection<Group> get(@CheckForNull String idpName) {
+        private Collection<Principal> get(@CheckForNull String idpName) {
             if (idpName == null) {
                 return ImmutableSet.of();
             }
 
-            Set<Group> principals;
+            Set<Principal> principals;
             if (!principalMap.containsKey(idpName)) {
                 String[] vs = autoMembershipMapping.get(idpName);
                 if (vs == null) {
                     principals = ImmutableSet.of();
                 } else {
-                    ImmutableSet.Builder<Group> builder = 
ImmutableSet.builder();
+                    ImmutableSet.Builder<Principal> builder = 
ImmutableSet.builder();
                     for (String groupId : autoMembershipMapping.get(idpName)) {
                         try {
                             Authorizable gr = 
userManager.getAuthorizable(groupId);
                             if (gr != null && gr.isGroup()) {
                                 Principal grPrincipal = gr.getPrincipal();
-                                if (grPrincipal instanceof Group) {
-                                    builder.add((Group) grPrincipal);
+                                if (GroupPrincipals.isGroup(grPrincipal)) {
+                                    builder.add(grPrincipal);
                                 } else {
-                                    log.warn("Principal of group {} is not of 
type java.security.acl.Group -> Ignoring", groupId);
+                                    log.warn("Principal of group {} is not of 
group type -> Ignoring", groupId);
                                 }
                             } else {
                                 log.warn("Configured auto-membership group {} 
does not exist -> Ignoring", groupId);

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
 Mon Mar 19 20:08:56 2018
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.oak.spi.se
 import static 
org.apache.jackrabbit.oak.spi.security.RegistrationConstants.OAK_SECURITY_NAME;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AbstractPrincipalTest.java
 Mon Mar 19 20:08:56 2018
@@ -24,6 +24,8 @@ import javax.annotation.Nonnull;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -80,19 +82,19 @@ public abstract class AbstractPrincipalT
         return config;
     }
 
-    java.security.acl.Group getGroupPrincipal() throws Exception {
+    GroupPrincipal getGroupPrincipal() throws Exception {
         ExternalUser externalUser = idp.getUser(USER_ID);
         return 
getGroupPrincipal(externalUser.getDeclaredGroups().iterator().next());
     }
 
-    java.security.acl.Group getGroupPrincipal(@Nonnull ExternalIdentityRef 
ref) throws Exception {
+    GroupPrincipal getGroupPrincipal(@Nonnull ExternalIdentityRef ref) throws 
Exception {
         String principalName = idp.getIdentity(ref).getPrincipalName();
         Principal p = principalProvider.getPrincipal(principalName);
 
         assertNotNull(p);
-        assertTrue(p instanceof java.security.acl.Group);
+        assertTrue(p instanceof GroupPrincipal);
 
-        return (java.security.acl.Group) p;
+        return (GroupPrincipal) p;
     }
 
     Group createTestGroup() throws Exception {

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
 Mon Mar 19 20:08:56 2018
@@ -27,6 +27,8 @@ import javax.annotation.Nullable;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
@@ -134,7 +136,7 @@ public class ExternalGroupPrincipalProvi
             Principal principal = principalProvider.getPrincipal(princName);
 
             assertNotNull(principal);
-            assertTrue(principal instanceof java.security.acl.Group);
+            assertTrue(principal instanceof GroupPrincipal);
         }
     }
 
@@ -194,18 +196,18 @@ public class ExternalGroupPrincipalProvi
 
     @Test
     public void testGetGroupMembershipLocalPrincipal() throws Exception {
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(getTestUser().getPrincipal());
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(getTestUser().getPrincipal());
         assertTrue(principals.isEmpty());
     }
 
     @Test
     public void testGetGroupMembershipLocalGroupPrincipal() throws Exception {
         Group gr = createTestGroup();
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(gr.getPrincipal());
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(gr.getPrincipal());
         assertTrue(principals.isEmpty());
 
-        // same if the principal is not marked as 'java.security.acl.Group' 
and not tree-based-principal
-        principals = principalProvider.getGroupMembership(new 
PrincipalImpl(gr.getPrincipal().getName()));
+        // same if the principal is not marked as 'GroupPrincipal' and not 
tree-based-principal
+        principals = principalProvider.getMembershipPrincipals(new 
PrincipalImpl(gr.getPrincipal().getName()));
         assertTrue(principals.isEmpty());
     }
 
@@ -216,7 +218,7 @@ public class ExternalGroupPrincipalProvi
 
         Set<Principal> expected = getExpectedGroupPrincipals(USER_ID);
 
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(user.getPrincipal());
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(user.getPrincipal());
         assertEquals(expected, principals);
     }
 
@@ -228,7 +230,7 @@ public class ExternalGroupPrincipalProvi
         Set<Principal> expected = getExpectedGroupPrincipals(USER_ID);
 
         // same as in test before even if the principal is not a 
tree-based-principal
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(new 
PrincipalImpl(user.getPrincipal().getName()));
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(new 
PrincipalImpl(user.getPrincipal().getName()));
         assertEquals(expected, principals);
     }
 
@@ -238,7 +240,7 @@ public class ExternalGroupPrincipalProvi
         Authorizable user = 
getUserManager(root).getAuthorizable(TestIdentityProvider.ID_SECOND_USER);
         assertNotNull(user);
 
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(user.getPrincipal());
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(user.getPrincipal());
         assertTrue(principals.isEmpty());
     }
 
@@ -249,7 +251,7 @@ public class ExternalGroupPrincipalProvi
         assertNotNull(user);
 
         // same as in test before even if the principal is not a 
tree-based-principal
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(new 
PrincipalImpl(user.getPrincipal().getName()));
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(new 
PrincipalImpl(user.getPrincipal().getName()));
         assertTrue(principals.isEmpty());
     }
 
@@ -258,11 +260,11 @@ public class ExternalGroupPrincipalProvi
         Authorizable group = 
getUserManager(root).getAuthorizable("secondGroup");
         assertNotNull(group);
 
-        Set<? extends Principal> principals = 
principalProvider.getGroupMembership(group.getPrincipal());
+        Set<? extends Principal> principals = 
principalProvider.getMembershipPrincipals(group.getPrincipal());
         assertTrue(principals.isEmpty());
 
-        // same if the principal is not marked as 'java.security.acl.Group' 
and not tree-based-principal
-        principals = principalProvider.getGroupMembership(new 
PrincipalImpl(group.getPrincipal().getName()));
+        // same if the principal is not marked as 'GroupPrincipal' and not 
tree-based-principal
+        principals = principalProvider.getMembershipPrincipals(new 
PrincipalImpl(group.getPrincipal().getName()));
         assertTrue(principals.isEmpty());
     }
 
@@ -377,7 +379,7 @@ public class ExternalGroupPrincipalProvi
         ExternalUser otherUser = new TestUser("anotherUser", 
ImmutableSet.of(gr.getExternalId()));
         sync(otherUser);
 
-        Set<Principal> expected = new HashSet();
+        Set<Principal> expected = new HashSet<>();
         expected.add(new PrincipalImpl(gr.getPrincipalName()));
         long depth = syncConfig.user().getMembershipNestingDepth();
         if (depth > 1) {

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalTest.java
 Mon Mar 19 20:08:56 2018
@@ -23,6 +23,8 @@ import javax.annotation.Nullable;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Group;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalUser;
@@ -38,7 +40,7 @@ public class ExternalGroupPrincipalTest
     @Test
     public void testIsMember() throws Exception {
         ExternalUser externalUser = idp.getUser(USER_ID);
-        java.security.acl.Group principal = 
getGroupPrincipal(externalUser.getDeclaredGroups().iterator().next());
+        GroupPrincipal principal = 
getGroupPrincipal(externalUser.getDeclaredGroups().iterator().next());
 
         assertTrue(principal.isMember(new 
PrincipalImpl(externalUser.getPrincipalName())));
         
assertTrue(principal.isMember(getUserManager(root).getAuthorizable(USER_ID).getPrincipal()));
@@ -46,7 +48,7 @@ public class ExternalGroupPrincipalTest
 
     @Test
     public void testIsMemberExternalGroup() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
+        GroupPrincipal principal = getGroupPrincipal();
 
         Iterable<String> exGroupPrincNames = 
Iterables.transform(ImmutableList.copyOf(idp.listGroups()), new 
Function<ExternalGroup, String>() {
             @Nullable
@@ -63,7 +65,7 @@ public class ExternalGroupPrincipalTest
 
     @Test
     public void testIsMemberLocalUser() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
+        GroupPrincipal principal = getGroupPrincipal();
 
         assertFalse(principal.isMember(getTestUser().getPrincipal()));
         assertFalse(principal.isMember(new 
PrincipalImpl(getTestUser().getPrincipal().getName())));
@@ -72,39 +74,15 @@ public class ExternalGroupPrincipalTest
     @Test
     public void testIsMemberLocalGroup() throws Exception {
         Group gr = createTestGroup();
-        java.security.acl.Group principal = getGroupPrincipal();
+        GroupPrincipal principal = getGroupPrincipal();
 
         assertFalse(principal.isMember(gr.getPrincipal()));
         assertFalse(principal.isMember(new 
PrincipalImpl(gr.getPrincipal().getName())));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
-    public void testAddMember() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
-        principal.addMember(getTestUser().getPrincipal());
-    }
-
-    @Test
-    public void testAddMemberExistingMember() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
-        
assertFalse(principal.addMember(getUserManager(root).getAuthorizable(USER_ID).getPrincipal()));
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void testRemoveMember() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
-        
principal.removeMember(getUserManager(root).getAuthorizable(USER_ID).getPrincipal());
-    }
-
-    @Test
-    public void testRemoveMemberNotMember() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
-        assertFalse(principal.removeMember(getTestUser().getPrincipal()));
-    }
-
     @Test
     public void testMembers() throws Exception {
-        java.security.acl.Group principal = getGroupPrincipal();
+        GroupPrincipal principal = getGroupPrincipal();
 
         Principal[] expectedMembers = new Principal[] {
                 getUserManager(root).getAuthorizable(USER_ID).getPrincipal(),

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderAutoMembershipTest.java
 Mon Mar 19 20:08:56 2018
@@ -107,7 +107,7 @@ public class PrincipalProviderAutoMember
 
         Authorizable user = getUserManager(root).getAuthorizable(USER_ID);
 
-        Set<java.security.acl.Group> result = 
principalProvider.getGroupMembership(user.getPrincipal());
+        Set<Principal> result = 
principalProvider.getMembershipPrincipals(user.getPrincipal());
         assertTrue(result.contains(userAutoMembershipGroup.getPrincipal()));
         assertTrue(result.contains(groupAutoMembershipGroup.getPrincipal()));
         assertEquals(expected, result);

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/PrincipalProviderDeepNestingTest.java
 Mon Mar 19 20:08:56 2018
@@ -20,6 +20,8 @@ import java.security.Principal;
 import java.util.Set;
 
 import com.google.common.collect.ImmutableSet;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentity;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
@@ -51,7 +53,7 @@ public class PrincipalProviderDeepNestin
             Principal principal = principalProvider.getPrincipal(princName);
 
             assertNotNull(principal);
-            assertTrue(principal instanceof java.security.acl.Group);
+            assertTrue(principal instanceof GroupPrincipal);
         }
     }
 
@@ -69,9 +71,9 @@ public class PrincipalProviderDeepNestin
                 Principal principal = 
principalProvider.getPrincipal(inheritedPrincName);
 
                 assertNotNull(principal);
-                assertTrue(principal instanceof java.security.acl.Group);
+                assertTrue(principal instanceof GroupPrincipal);
 
-                java.security.acl.Group inheritedGrPrincipal = 
(java.security.acl.Group) principal;
+                GroupPrincipal inheritedGrPrincipal = (GroupPrincipal) 
principal;
                 assertTrue(inheritedGrPrincipal.isMember(new 
PrincipalImpl(externalUser.getPrincipalName())));
                 assertFalse(inheritedGrPrincipal.isMember(grPrincipal));
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.security.authorization.permission;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -50,6 +49,7 @@ import org.apache.jackrabbit.oak.spi.sec
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.RepositoryPermission;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
@@ -103,7 +103,7 @@ final class CompiledPermissionImpl imple
         Set<String> userNames = new HashSet<String>(principals.size());
         Set<String> groupNames = new HashSet<String>(principals.size());
         for (Principal principal : principals) {
-            if (principal instanceof Group) {
+            if (GroupPrincipals.isGroup(principal)) {
                 groupNames.add(principal.getName());
             } else {
                 userNames.add(principal.getName());

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -38,6 +37,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
@@ -81,7 +81,7 @@ class PrincipalProviderImpl implements P
 
     @Nonnull
     @Override
-    public Set<Group> getGroupMembership(@Nonnull Principal principal) {
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
         Authorizable authorizable = getAuthorizable(principal);
         if (authorizable == null) {
             return Collections.emptySet();
@@ -144,14 +144,14 @@ class PrincipalProviderImpl implements P
         }
     }
 
-    private Set<Group> getGroupMembership(Authorizable authorizable) {
-        Set<java.security.acl.Group> groupPrincipals = new HashSet<Group>();
+    private Set<Principal> getGroupMembership(Authorizable authorizable) {
+        Set<Principal> groupPrincipals = new HashSet<>();
         try {
             Iterator<org.apache.jackrabbit.api.security.user.Group> groups = 
authorizable.memberOf();
             while (groups.hasNext()) {
                 Principal grPrincipal = groups.next().getPrincipal();
-                if (grPrincipal instanceof Group) {
-                    groupPrincipals.add((Group) grPrincipal);
+                if (GroupPrincipals.isGroup(grPrincipal)) {
+                    groupPrincipals.add(grPrincipal);
                 }
             }
         } catch (RepositoryException e) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
 Mon Mar 19 20:08:56 2018
@@ -25,6 +25,8 @@ import javax.jcr.RepositoryException;
 import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterators;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.oak.api.Tree;
@@ -36,7 +38,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Base class for {@code Group} principals.
  */
-abstract class AbstractGroupPrincipal extends TreeBasedPrincipal implements 
java.security.acl.Group {
+abstract class AbstractGroupPrincipal extends TreeBasedPrincipal implements 
GroupPrincipal {
 
     private static final Logger log = 
LoggerFactory.getLogger(AbstractGroupPrincipal.class);
 
@@ -110,13 +112,4 @@ abstract class AbstractGroupPrincipal ex
         return Iterators.asEnumeration(Iterators.filter(principals, 
Predicates.<Object>notNull()));
     }
 
-    @Override
-    public boolean addMember(Principal principal) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean removeMember(Principal principal) {
-        throw new UnsupportedOperationException();
-    }
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ImpersonationImpl.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.security.user;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.HashSet;
 import java.util.Set;
 import javax.annotation.CheckForNull;
@@ -34,6 +33,7 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
+import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import 
org.apache.jackrabbit.oak.spi.security.principal.PrincipalIteratorAdapter;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
@@ -182,7 +182,7 @@ class ImpersonationImpl implements Imper
     private boolean isAdmin(@Nonnull Principal principal) {
         if (principal instanceof AdminPrincipal) {
             return true;
-        } else if (principal instanceof Group) {
+        } else if (GroupPrincipals.isGroup(principal)) {
             return false;
         } else {
             try {
@@ -215,7 +215,7 @@ class ImpersonationImpl implements Imper
             log.debug("Cannot grant impersonation to an unknown principal.");
             return false;
         }
-        if (p instanceof Group) {
+        if (GroupPrincipals.isGroup(p)) {
             log.debug("Cannot grant impersonation to a principal that is a 
Group.");
             return false;
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.security.user;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.text.ParseException;
 import java.util.Collections;
 import java.util.Date;
@@ -118,7 +117,7 @@ class UserPrincipalProvider implements P
 
     @Nonnull
     @Override
-    public Set<Group> getGroupMembership(@Nonnull Principal principal) {
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
         Tree tree = getAuthorizableTree(principal);
         if (tree == null) {
             return Collections.emptySet();
@@ -217,12 +216,12 @@ class UserPrincipalProvider implements P
     }
 
     @CheckForNull
-    private Group createGroupPrincipal(@Nonnull Tree groupTree) {
+    private Principal createGroupPrincipal(@Nonnull Tree groupTree) {
         String principalName = getPrincipalName(groupTree);
         if (principalName == null) {
             return null;
         }
-        return new GroupPrincipal(principalName, groupTree);
+        return new GroupPrincipalImpl(principalName, groupTree);
     }
 
     @CheckForNull
@@ -238,8 +237,8 @@ class UserPrincipalProvider implements P
     }
 
     @Nonnull
-    private Set<Group> getGroupMembership(@Nonnull Tree authorizableTree) {
-        Set<Group> groupPrincipals = null;
+    private Set<Principal> getGroupMembership(@Nonnull Tree authorizableTree) {
+        Set<Principal> groupPrincipals = null;
         boolean doCache = cacheEnabled && UserUtil.isType(authorizableTree, 
AuthorizableType.USER);
         if (doCache) {
             groupPrincipals = readGroupsFromCache(authorizableTree);
@@ -247,12 +246,12 @@ class UserPrincipalProvider implements P
 
         // caching not configured or cache expired: use the membershipProvider 
to calculate
         if (groupPrincipals == null) {
-            groupPrincipals = new HashSet<Group>();
+            groupPrincipals = new HashSet<>();
             Iterator<String> groupPaths = 
membershipProvider.getMembership(authorizableTree, true);
             while (groupPaths.hasNext()) {
                 Tree groupTree = 
userProvider.getAuthorizableByPath(groupPaths.next());
                 if (groupTree != null && UserUtil.isType(groupTree, 
AuthorizableType.GROUP)) {
-                    Group gr = createGroupPrincipal(groupTree);
+                    Principal gr = createGroupPrincipal(groupTree);
                     if (gr != null) {
                         groupPrincipals.add(gr);
                     }
@@ -271,7 +270,7 @@ class UserPrincipalProvider implements P
         return groupPrincipals;
     }
 
-    private void cacheGroups(@Nonnull Tree authorizableNode, @Nonnull 
Set<Group> groupPrincipals) {
+    private void cacheGroups(@Nonnull Tree authorizableNode, @Nonnull 
Set<Principal> groupPrincipals) {
         try {
             root.refresh();
             Tree cache = authorizableNode.getChild(CacheConstants.REP_CACHE);
@@ -286,9 +285,9 @@ class UserPrincipalProvider implements P
             }
 
             cache.setProperty(CacheConstants.REP_EXPIRATION, 
LongUtils.calculateExpirationTime(expiration));
-            String value = (groupPrincipals.isEmpty()) ? "" : 
Joiner.on(",").join(Iterables.transform(groupPrincipals, new Function<Group, 
String>() {
+            String value = (groupPrincipals.isEmpty()) ? "" : 
Joiner.on(",").join(Iterables.transform(groupPrincipals, new 
Function<Principal, String>() {
                 @Override
-                public String apply(Group input) {
+                public String apply(Principal input) {
                     return Text.escape(input.getName());
                 }
             }));
@@ -307,7 +306,7 @@ class UserPrincipalProvider implements P
     }
 
     @CheckForNull
-    private Set<Group> readGroupsFromCache(@Nonnull Tree authorizableNode) {
+    private Set<Principal> readGroupsFromCache(@Nonnull Tree authorizableNode) 
{
         Tree principalCache = 
authorizableNode.getChild(CacheConstants.REP_CACHE);
         if (!principalCache.exists()) {
             log.debug("No group cache at " + authorizableNode.getPath());
@@ -319,10 +318,10 @@ class UserPrincipalProvider implements P
 
             String str = TreeUtil.getString(principalCache, 
CacheConstants.REP_GROUP_PRINCIPAL_NAMES);
             if (str == null || str.isEmpty()) {
-                return new HashSet<Group>(1);
+                return Collections.emptySet();
             }
 
-            Set<Group> groups = new HashSet<Group>();
+            Set<Principal> groups = new HashSet<>();
             for (String s : Text.explode(str, ',')) {
                 final String name = Text.unescape(s);
                 groups.add(new CachedGroupPrincipal(name));
@@ -441,11 +440,11 @@ class UserPrincipalProvider implements P
      * Implementation of {@link AbstractGroupPrincipal} that reads the 
underlying
      * authorizable group lazily in case the group membership must be 
retrieved.
      */
-    private final class GroupPrincipal extends BaseGroupPrincipal {
+    private final class GroupPrincipalImpl extends BaseGroupPrincipal {
 
         private org.apache.jackrabbit.api.security.user.Group group;
 
-        GroupPrincipal(@Nonnull String principalName, @Nonnull Tree groupTree) 
{
+        GroupPrincipalImpl(@Nonnull String principalName, @Nonnull Tree 
groupTree) {
             super(principalName, groupTree);
         }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/ACLTest.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.security.authorization.accesscontrol;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -551,7 +550,7 @@ public class ACLTest extends AbstractAcc
     @Test
     public void testSetEntryForGroupPrincipal() throws Exception {
         Privilege[] privs = privilegesFromNames(JCR_READ);
-        Group grPrincipal = (Group) principalManager.getEveryone();
+        Principal grPrincipal = principalManager.getEveryone();
 
         // adding allow-entry must succeed
         assertTrue(acl.addAccessControlEntry(grPrincipal, privs));

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
 Mon Mar 19 20:08:56 2018
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
@@ -170,7 +171,7 @@ public abstract class AbstractPrincipalP
         Principal principal = 
principalProvider.getPrincipal(testGroup.getPrincipal().getName());
 
         assertNotNull(principal);
-        assertTrue(principal instanceof java.security.acl.Group);
+        assertTrue(principal instanceof GroupPrincipal);
     }
 
     @Test
@@ -196,7 +197,7 @@ public abstract class AbstractPrincipalP
 
     @Test
     public void testGetGroupMembership() throws Exception {
-        Set<java.security.acl.Group> grPrincipals  = 
principalProvider.getGroupMembership(userPrincipal);
+        Set<Principal> grPrincipals  = 
principalProvider.getMembershipPrincipals(userPrincipal);
         assertEquals(2, grPrincipals.size());
         assertTrue(grPrincipals.contains(EveryonePrincipal.getInstance()));
         assertTrue(grPrincipals.contains(testGroup.getPrincipal()));
@@ -204,21 +205,21 @@ public abstract class AbstractPrincipalP
 
     @Test
     public void tstGetGroupMembershipNonExisting() {
-        Set<java.security.acl.Group> grPrincipals = 
principalProvider.getGroupMembership(nonExisting);
+        Set<Principal> grPrincipals = 
principalProvider.getMembershipPrincipals(nonExisting);
         assertNotNull(grPrincipals);
         assertTrue(grPrincipals.isEmpty());
     }
 
     @Test
     public void testGetGroupMembershipEveryonePrincipal() {
-        Set<java.security.acl.Group> grPrincipals = 
principalProvider.getGroupMembership(EveryonePrincipal.getInstance());
+        Set<Principal> grPrincipals = 
principalProvider.getMembershipPrincipals(EveryonePrincipal.getInstance());
         assertNotNull(grPrincipals);
         assertTrue(grPrincipals.isEmpty());
     }
 
     @Test
     public void testGetGroupMembershipGroupPrincipal() throws Exception {
-        Set<java.security.acl.Group> grPrincipals = 
principalProvider.getGroupMembership(testGroup.getPrincipal());
+        Set<Principal> grPrincipals = 
principalProvider.getMembershipPrincipals(testGroup.getPrincipal());
         assertNotNull(grPrincipals);
         assertEquals(1, grPrincipals.size());
         assertTrue(grPrincipals.contains(EveryonePrincipal.getInstance()));
@@ -226,7 +227,7 @@ public abstract class AbstractPrincipalP
 
     @Test
     public void testGetGroupMembershipGroupPrincipal2() throws Exception {
-        Set<java.security.acl.Group> grPrincipals = 
principalProvider.getGroupMembership(testGroup2.getPrincipal());
+        Set<Principal> grPrincipals = 
principalProvider.getMembershipPrincipals(testGroup2.getPrincipal());
         assertNotNull(grPrincipals);
         assertEquals(2, grPrincipals.size());
         assertTrue(grPrincipals.contains(testGroup.getPrincipal()));

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
 Mon Mar 19 20:08:56 2018
@@ -22,6 +22,8 @@ import java.util.Iterator;
 import java.util.Set;
 
 import com.google.common.collect.ImmutableSet;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
@@ -50,7 +52,7 @@ public class PrincipalProviderImplTest e
             root.commit();
 
             Principal ep = 
principalProvider.getPrincipal(EveryonePrincipal.NAME);
-            Set<? extends Principal> everyoneMembers = 
ImmutableSet.copyOf(Collections.list(((java.security.acl.Group) ep).members()));
+            Set<? extends Principal> everyoneMembers = 
ImmutableSet.copyOf(Collections.list(((GroupPrincipal) ep).members()));
 
             Iterator<? extends Principal> all = 
principalProvider.findPrincipals(PrincipalManager.SEARCH_TYPE_ALL);
             while (all.hasNext()) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipalTest.java
 Mon Mar 19 20:08:56 2018
@@ -152,16 +152,6 @@ public class AbstractGroupPrincipalTest
         assertFalse(everyoneAgp.isMember(member));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
-    public void testAddMember() {
-        agp.addMember(new PrincipalImpl("name"));
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void testRemoveMember() {
-        agp.removeMember(new PrincipalImpl("name"));
-    }
-
     private class AGP extends AbstractGroupPrincipal {
 
         private Authorizable member;

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/ImpersonationImplEmptyTest.java
 Mon Mar 19 20:08:56 2018
@@ -23,6 +23,8 @@ import java.util.UUID;
 import javax.security.auth.Subject;
 
 import com.google.common.collect.ImmutableSet;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
@@ -39,17 +41,7 @@ import static org.junit.Assert.assertTru
 
 public class ImpersonationImplEmptyTest extends AbstractSecurityTest {
 
-    final java.security.acl.Group groupPrincipal = new 
java.security.acl.Group() {
-        @Override
-        public boolean addMember(Principal user) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean removeMember(Principal user) {
-            throw new UnsupportedOperationException();
-        }
-
+    final GroupPrincipal groupPrincipal = new GroupPrincipal() {
         @Override
         public boolean isMember(Principal member) {
             throw new UnsupportedOperationException();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
 Mon Mar 19 20:08:56 2018
@@ -21,6 +21,7 @@ import java.util.Enumeration;
 import java.util.Set;
 import java.util.UUID;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
@@ -150,9 +151,9 @@ public class UserPrincipalProviderTest e
 
             Principal ep = 
principalProvider.getPrincipal(EveryonePrincipal.NAME);
 
-            assertTrue(ep instanceof java.security.acl.Group);
-            ((java.security.acl.Group) ep).members();
-            ((java.security.acl.Group) 
ep).isMember(getTestUser().getPrincipal());
+            assertTrue(ep instanceof GroupPrincipal);
+            //((GroupPrincipal) ep).members();
+            //assertTrue(((GroupPrincipal) 
ep).isMember(getTestUser().getPrincipal()));
 
         } finally {
             if (everyoneGroup != null) {
@@ -171,10 +172,10 @@ public class UserPrincipalProviderTest e
         try {
             Principal principal = 
principalProvider.getPrincipal(group.getPrincipal().getName());
 
-            assertTrue(principal instanceof java.security.acl.Group);
+            assertTrue(principal instanceof GroupPrincipal);
 
             boolean found = false;
-            Enumeration<? extends Principal> members = 
((java.security.acl.Group) principal).members();
+            Enumeration<? extends Principal> members = ((GroupPrincipal) 
principal).members();
             while (members.hasMoreElements() && !found) {
                 found = 
members.nextElement().equals(getTestUser().getPrincipal());
             }
@@ -194,8 +195,8 @@ public class UserPrincipalProviderTest e
         try {
             Principal principal = 
principalProvider.getPrincipal(group.getPrincipal().getName());
 
-            assertTrue(principal instanceof java.security.acl.Group);
-            ((java.security.acl.Group) 
principal).isMember(getTestUser().getPrincipal());
+            assertTrue(principal instanceof GroupPrincipal);
+            assertTrue(((GroupPrincipal) 
principal).isMember(getTestUser().getPrincipal()));
         } finally {
             group.remove();
             root.commit();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
 Mon Mar 19 20:08:56 2018
@@ -32,6 +32,7 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Group;
@@ -171,7 +172,7 @@ public class UserPrincipalProviderWithCa
     public void testGetGroupMembershipPopulatesCache() throws Exception {
         PrincipalProvider pp = createPrincipalProvider(systemRoot);
 
-        Set<? extends Principal> principals = 
pp.getGroupMembership(getTestUser().getPrincipal());
+        Set<? extends Principal> principals = 
pp.getMembershipPrincipals(getTestUser().getPrincipal());
         assertPrincipals(principals, EveryonePrincipal.getInstance(), 
testGroup.getPrincipal());
 
         root.refresh();
@@ -234,10 +235,10 @@ public class UserPrincipalProviderWithCa
     public void testGetGroupMembershipForGroups() throws Exception {
         PrincipalProvider pp = createPrincipalProvider(systemRoot);
 
-        Set<? extends Principal> principals = 
pp.getGroupMembership(testGroup.getPrincipal());
+        Set<? extends Principal> principals = 
pp.getMembershipPrincipals(testGroup.getPrincipal());
         assertPrincipals(principals, EveryonePrincipal.getInstance());
 
-        principals = pp.getGroupMembership(testGroup2.getPrincipal());
+        principals = pp.getMembershipPrincipals(testGroup2.getPrincipal());
         assertPrincipals(principals, EveryonePrincipal.getInstance(), 
testGroup.getPrincipal());
 
         root.refresh();
@@ -273,7 +274,7 @@ public class UserPrincipalProviderWithCa
 
         for (Principal p : principals) {
             String className = p.getClass().getName();
-            
assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipal",
 className);
+            
assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipalImpl",
 className);
         }
 
         Principal testPrincipal = getTestUser().getPrincipal();
@@ -288,7 +289,7 @@ public class UserPrincipalProviderWithCa
             assertTrue(p instanceof TreeBasedPrincipal);
             assertEquals(testGroup.getPath(), ((TreeBasedPrincipal) 
p).getPath());
 
-            java.security.acl.Group principalGroup = (java.security.acl.Group) 
p;
+            GroupPrincipal principalGroup = (GroupPrincipal) p;
             assertTrue(principalGroup.isMember(testPrincipal));
 
             Enumeration<? extends Principal> members = 
principalGroup.members();
@@ -307,7 +308,7 @@ public class UserPrincipalProviderWithCa
 
         for (Principal p : principals) {
             String className = p.getClass().getName();
-            
assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipal",
 className);
+            
assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipalImpl",
 className);
         }
 
         testGroup.remove();
@@ -326,7 +327,7 @@ public class UserPrincipalProviderWithCa
             assertTrue(p instanceof TreeBasedPrincipal);
             assertNull(((TreeBasedPrincipal) p).getPath());
 
-            java.security.acl.Group principalGroup = (java.security.acl.Group) 
p;
+            GroupPrincipal principalGroup = (GroupPrincipal) p;
             assertFalse(principalGroup.isMember(getTestUser().getPrincipal()));
 
             Enumeration<? extends Principal> members = 
principalGroup.members();
@@ -520,7 +521,7 @@ public class UserPrincipalProviderWithCa
 
         root.refresh();
 
-        List<PropertyState> props = new ArrayList();
+        List<PropertyState> props = new ArrayList<>();
         props.add(PropertyStates.createProperty(CacheConstants.REP_EXPIRATION, 
25));
         
props.add(PropertyStates.createProperty(CacheConstants.REP_GROUP_PRINCIPAL_NAMES,
 EveryonePrincipal.NAME));
         props.add(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, 
JcrConstants.NT_UNSTRUCTURED));
@@ -603,7 +604,7 @@ public class UserPrincipalProviderWithCa
     private static final class GroupPredicate implements Predicate<Principal> {
         @Override
         public boolean apply(@Nullable Principal input) {
-            return (input instanceof java.security.acl.Group) && 
!EveryonePrincipal.getInstance().equals(input);
+            return (input instanceof GroupPrincipal) && 
!EveryonePrincipal.getInstance().equals(input);
         }
     }
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.exercise.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
@@ -50,7 +49,7 @@ class CustomPrincipalProvider implements
 
     @Nonnull
     @Override
-    public Set<Group> getGroupMembership(@Nonnull Principal principal) {
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
         // EXERCISE : expose the group membership of your known Principals
         // EXERCISE : add every other principal into one of your 
known-principal-groups to establish dynamic group membership
         return Collections.EMPTY_SET;

Modified: 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/authorization/permission/L3_PrecedenceRulesTest.java
 Mon Mar 19 20:08:56 2018
@@ -25,6 +25,7 @@ import javax.jcr.security.Privilege;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
@@ -162,7 +163,7 @@ public class L3_PrecedenceRulesTest exte
     public void testGroupMembership() throws RepositoryException {
         assertFalse(testSession.nodeExists(testRoot));
 
-        assertTrue(((java.security.acl.Group) 
testGroupPrincipal).isMember(testPrincipal));
+        assertTrue(((GroupPrincipal) 
testGroupPrincipal).isMember(testPrincipal));
 
         AccessControlUtils.addAccessControlEntry(superuser, testRoot, 
testGroupPrincipal, AccessControlUtils.privilegesFromNames(superuser, 
Privilege.JCR_READ), true);
         superuser.save();

Modified: 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-exercise/src/test/java/org/apache/jackrabbit/oak/exercise/security/principal/L3_EveryoneTest.java
 Mon Mar 19 20:08:56 2018
@@ -20,6 +20,7 @@ import java.security.Principal;
 import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -41,10 +42,10 @@ import org.apache.jackrabbit.test.Abstra
  *
  * - {@link #testEveryoneExists()}
  *   Test to illustrate the that everyone principal always exists and always is
- *   an instanceof {@link java.security.acl.Group} even if there is no 
corresponding
- *   authorizable.
+ *   an instanceof {@link 
org.apache.jackrabbit.api.security.principal.GroupPrincipal} even if
+ *   there is no corresponding authorizable.
  *   Discuss the meaning of the everyone principal and why having a 
corresponding authorizable is optional.
- *   Note the difference between java.security.acl.Group and 
org.apache.jackrabbit.api.security.user.Group.
+ *   Note the difference between GroupPrincipal and 
org.apache.jackrabbit.api.security.user.Group.
  *
  * - {@link #testEveryoneName()}
  *   Test to illustrate that the name of the everyone principal is constant.
@@ -104,7 +105,7 @@ public class L3_EveryoneTest extends Abs
         Principal everyone = principalManager.getEveryone();
 
         assertNotNull(everyone);
-        assertTrue(everyone instanceof java.security.acl.Group);
+        assertTrue(everyone instanceof GroupPrincipal);
 
         Authorizable everyoneAuthorizable = ((JackrabbitSession) 
superuser).getUserManager().getAuthorizable(everyone);
         assertNull(everyoneAuthorizable);
@@ -127,7 +128,7 @@ public class L3_EveryoneTest extends Abs
     }
 
     public void testEveryoneIsMemberofEveryone() throws RepositoryException {
-        java.security.acl.Group everyone = (java.security.acl.Group) 
principalManager.getEveryone();
+        GroupPrincipal everyone = (GroupPrincipal) 
principalManager.getEveryone();
         PrincipalIterator it = 
principalManager.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL);
 
         // EXERCISE: discuss the dynamic nature of the everyone group principal
@@ -147,7 +148,7 @@ public class L3_EveryoneTest extends Abs
         superuser.save();
 
         try {
-            java.security.acl.Group everyone = (java.security.acl.Group) 
principalManager.getEveryone();
+            GroupPrincipal everyone = (GroupPrincipal) 
principalManager.getEveryone();
 
             assertEquals(everyone, everyoneAuthorizable.getPrincipal());
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
 Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.jcr.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
@@ -26,6 +25,7 @@ import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
@@ -42,7 +42,7 @@ import org.junit.Test;
 public class PrincipalManagerTest extends AbstractJCRTest {
 
     private PrincipalManager principalMgr;
-    private Group everyone;
+    private GroupPrincipal everyone;
 
     private Principal[] adminPrincipals;
 
@@ -55,7 +55,7 @@ public class PrincipalManagerTest extend
             throw new NotExecutableException();
         }
         principalMgr = ((JackrabbitSession) superuser).getPrincipalManager();
-        everyone = (Group) principalMgr.getEveryone();
+        everyone = (GroupPrincipal) principalMgr.getEveryone();
 
         adminPrincipals = getPrincipals(getHelper().getSuperuserCredentials());
     }
@@ -76,7 +76,7 @@ public class PrincipalManagerTest extend
     }
 
     private static boolean isGroup(Principal p) {
-        return p instanceof java.security.acl.Group;
+        return p instanceof GroupPrincipal;
     }
 
     @Test
@@ -187,7 +187,7 @@ public class PrincipalManagerTest extend
                 continue;
             }
             if (isGroup(p)) {
-                Enumeration<? extends Principal> en = 
((java.security.acl.Group) p).members();
+                Enumeration<? extends Principal> en = ((GroupPrincipal) 
p).members();
                 while (en.hasMoreElements()) {
                     Principal memb = en.nextElement();
                     assertTrue(principalMgr.hasPrincipal(memb.getName()));
@@ -209,7 +209,7 @@ public class PrincipalManagerTest extend
                     continue;
                 }
                 if (isGroup(p)) {
-                    Enumeration<? extends Principal> en = 
((java.security.acl.Group) p).members();
+                    Enumeration<? extends Principal> en = ((GroupPrincipal) 
p).members();
                     while (en.hasMoreElements()) {
                         Principal memb = en.nextElement();
                         assertTrue(principalMgr.hasPrincipal(memb.getName()));
@@ -274,7 +274,7 @@ public class PrincipalManagerTest extend
 
             assertTrue(isGroup(p));
 
-            Enumeration<? extends Principal> members = 
((java.security.acl.Group) p).members();
+            Enumeration<? extends Principal> members = ((GroupPrincipal) 
p).members();
             while (members.hasMoreElements()) {
                 Principal memb = members.nextElement();
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/EveryoneGroupTest.java
 Mon Mar 19 20:08:56 2018
@@ -22,6 +22,7 @@ import java.util.Iterator;
 import java.util.Set;
 import javax.jcr.RepositoryException;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
@@ -68,11 +69,11 @@ public class EveryoneGroupTest extends A
     @Test
     public void testGroupPrincipal() throws Exception {
         Principal everyonePrincipal = everyone.getPrincipal();
-        assertTrue(everyonePrincipal instanceof java.security.acl.Group);
+        assertTrue(everyonePrincipal instanceof GroupPrincipal);
         assertTrue(everyonePrincipal.equals(EveryonePrincipal.getInstance()));
         assertTrue(EveryonePrincipal.getInstance().equals(everyonePrincipal));
 
-        java.security.acl.Group gr = (java.security.acl.Group) 
everyonePrincipal;
+        GroupPrincipal gr = (GroupPrincipal) everyonePrincipal;
         assertFalse(gr.isMember(everyonePrincipal));
         assertTrue(gr.isMember(getTestUser(superuser).getPrincipal()));
         assertTrue(gr.isMember(new PrincipalImpl("test")));

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java
 Mon Mar 19 20:08:56 2018
@@ -27,6 +27,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.UnsupportedRepositoryOperationException;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.AuthorizableExistsException;
 import org.apache.jackrabbit.api.security.user.Group;
@@ -491,8 +492,8 @@ public class GroupTest extends AbstractU
             newGroup2.addMember(auth);
             superuser.save();
 
-            java.security.acl.Group ngPrincipal = (java.security.acl.Group) 
newGroup.getPrincipal();
-            java.security.acl.Group ng2Principal = (java.security.acl.Group) 
newGroup2.getPrincipal();
+            GroupPrincipal ngPrincipal = (GroupPrincipal) 
newGroup.getPrincipal();
+            GroupPrincipal ng2Principal = (GroupPrincipal) 
newGroup2.getPrincipal();
 
             assertFalse(ng2Principal.isMember(ngPrincipal));
 

Modified: jackrabbit/oak/trunk/oak-security-spi/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/pom.xml?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-security-spi/pom.xml Mon Mar 19 20:08:56 2018
@@ -34,7 +34,7 @@
   <properties>
     <!-- enable execution of jacoco and set minimal line coverage -->
     <skip.coverage>false</skip.coverage>
-    <minimum.coverage>0.90</minimum.coverage>
+    <minimum.coverage>0.89</minimum.coverage>
   </properties>
 
   <build>

Modified: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
 Mon Mar 19 20:08:56 2018
@@ -492,9 +492,9 @@ public abstract class AbstractLoginModul
             log.debug("Cannot retrieve principals. No principal provider 
configured.");
             return Collections.emptySet();
         } else {
-            Set<Principal> principals = new HashSet();
+            Set<Principal> principals = new HashSet<>();
             principals.add(userPrincipal);
-            
principals.addAll(principalProvider.getGroupMembership(userPrincipal));
+            
principals.addAll(principalProvider.getMembershipPrincipals(userPrincipal));
             return principals;
         }
     }

Modified: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
 Mon Mar 19 20:08:56 2018
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.spi.se
 
 import java.security.Principal;
 import java.security.acl.Group;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -70,9 +71,15 @@ public class CompositePrincipalProvider
     @Nonnull
     @Override
     public Set<Group> getGroupMembership(@Nonnull Principal principal) {
-        Set<Group> groups = new HashSet<Group>();
+        return Collections.emptySet();
+    }
+
+    @Nonnull
+    @Override
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
+        Set<Principal> groups = new HashSet<>();
         for (PrincipalProvider provider : providers) {
-            groups.addAll(provider.getGroupMembership(principal));
+            groups.addAll(provider.getMembershipPrincipals(principal));
         }
         return groups;
     }

Modified: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
 Mon Mar 19 20:08:56 2018
@@ -24,8 +24,6 @@ import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Implementation of the {@code PrincipalProvider} interface that never
  * returns any principals.
@@ -44,13 +42,19 @@ public final class EmptyPrincipalProvide
     @Nonnull
     @Override
     public Set<Group> getGroupMembership(@Nonnull Principal principal) {
-        return ImmutableSet.of();
+        return Collections.emptySet();
+    }
+
+    @Nonnull
+    @Override
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal 
principal) {
+        return Collections.emptySet();
     }
 
     @Nonnull
     @Override
     public Set<? extends Principal> getPrincipals(@Nonnull String userID) {
-        return ImmutableSet.of();
+        return Collections.emptySet();
     }
 
     @Nonnull

Modified: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipal.java
 Mon Mar 19 20:08:56 2018
@@ -20,12 +20,13 @@ import java.security.Principal;
 import java.security.acl.Group;
 import java.util.Enumeration;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.JackrabbitPrincipal;
 
 /**
  * Built-in principal group that has every other principal as member.
  */
-public final class EveryonePrincipal implements JackrabbitPrincipal, 
java.security.acl.Group {
+public final class EveryonePrincipal implements JackrabbitPrincipal, Group, 
GroupPrincipal {
 
     public static final String NAME = "everyone";
 
@@ -54,6 +55,7 @@ public final class EveryonePrincipal imp
         throw new UnsupportedOperationException("Cannot remove a member from 
the everyone group.");
     }
 
+    //------------------------------------------------------< GroupPrincipal 
>---
     @Override
     public boolean isMember(Principal member) {
         return !member.equals(this);
@@ -75,7 +77,7 @@ public final class EveryonePrincipal imp
     public boolean equals(Object obj) {
         if (obj == this) {
             return true;
-        } else if (obj instanceof JackrabbitPrincipal && obj instanceof Group) 
{
+        } else if (obj instanceof JackrabbitPrincipal && 
GroupPrincipals.isGroup((Principal) obj)) {
             JackrabbitPrincipal other = (JackrabbitPrincipal) obj;
             return NAME.equals(other.getName());
         }

Added: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java?rev=1827239&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java
 Mon Mar 19 20:08:56 2018
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.security.principal;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Enumeration;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
+
+@Deprecated
+class GroupPrincipalWrapper extends PrincipalImpl implements GroupPrincipal {
+
+    private final Group group;
+
+    GroupPrincipalWrapper(@Nonnull Group group) {
+        super(group.getName());
+        this.group = group;
+    }
+
+    @Override
+    public String getName() {
+        return group.getName();
+    }
+
+    @Override
+    public boolean isMember(Principal member) {
+        return group.isMember(member);
+    }
+
+    @Override
+    public Enumeration<? extends Principal> members() {
+        return GroupPrincipals.transform(group.members());
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to