diff --git a/core/src/main/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImpl.java b/core/src/main/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImpl.java index 5ba9d2fdca..581c6b01c3 100755 --- a/core/src/main/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImpl.java +++ b/core/src/main/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImpl.java @@ -29,6 +29,7 @@ import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.authority.GrantedAuthorityImpl; /** @@ -106,7 +107,7 @@ public class RoleHierarchyImpl implements RoleHierarchy { public Collection getReachableGrantedAuthorities(Collection authorities) { if (authorities == null || authorities.isEmpty()) { - return null; + return AuthorityUtils.NO_AUTHORITIES; } Set reachableRoles = new HashSet(); diff --git a/core/src/test/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImplTests.java b/core/src/test/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImplTests.java index 6f3aa90564..ae6c249d37 100755 --- a/core/src/test/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImplTests.java +++ b/core/src/test/java/org/springframework/security/access/hierarchicalroles/RoleHierarchyImplTests.java @@ -14,6 +14,7 @@ package org.springframework.security.access.hierarchicalroles; +import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; @@ -30,6 +31,19 @@ import org.springframework.security.core.authority.AuthorityUtils; */ public class RoleHierarchyImplTests extends TestCase { + public void testRoleHierarchyWithNullOrEmptyAuthorities() { + List authorities0 = null; + List authorities1 = new ArrayList(); + + RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); + roleHierarchyImpl.setHierarchy("ROLE_A > ROLE_B"); + + assertNotNull(roleHierarchyImpl.getReachableGrantedAuthorities(authorities0)); + assertEquals(0, roleHierarchyImpl.getReachableGrantedAuthorities(authorities0).size()); + assertNotNull(roleHierarchyImpl.getReachableGrantedAuthorities(authorities1)); + assertEquals(0, roleHierarchyImpl.getReachableGrantedAuthorities(authorities1).size()); + } + public void testSimpleRoleHierarchy() { List authorities0 = AuthorityUtils.createAuthorityList("ROLE_0");