1
0
mirror of synced 2026-08-05 01:36:56 +00:00

SEC-1231: Authentication.getAuthorities should be of type Collection<GrantedAuthority> and not List<GrantedAuthority>. Refactored the interface and related classes to match (UserDetails etc).

This commit is contained in:
Luke Taylor
2009-10-05 19:28:53 +00:00
parent 07d7c0ddae
commit caff3ee9ba
64 changed files with 296 additions and 355 deletions
@@ -1,7 +1,7 @@
package org.springframework.security.access.expression;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
@@ -96,7 +96,7 @@ public abstract class SecurityExpressionRoot {
private Set<String> getAuthoritySet() {
if (roles == null) {
roles = new HashSet<String>();
List<GrantedAuthority> userAuthorities = authentication.getAuthorities();
Collection<GrantedAuthority> userAuthorities = authentication.getAuthorities();
if (roleHierarchy != null) {
userAuthorities = roleHierarchy.getReachableGrantedAuthorities(userAuthorities);
@@ -1,6 +1,6 @@
package org.springframework.security.access.hierarchicalroles;
import java.util.List;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
@@ -12,7 +12,7 @@ import org.springframework.security.core.GrantedAuthority;
*/
public final class NullRoleHierarchy implements RoleHierarchy {
public List<GrantedAuthority> getReachableGrantedAuthorities(List<GrantedAuthority> authorities) {
public Collection<GrantedAuthority> getReachableGrantedAuthorities(Collection<GrantedAuthority> authorities) {
return authorities;
}
@@ -14,7 +14,7 @@
package org.springframework.security.access.hierarchicalroles;
import java.util.List;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
@@ -40,6 +40,6 @@ public interface RoleHierarchy {
* @param authorities - List of the directly assigned authorities.
* @return List of all reachable authorities given the assigned authorities.
*/
public List<GrantedAuthority> getReachableGrantedAuthorities(List<GrantedAuthority> authorities);
public Collection<GrantedAuthority> getReachableGrantedAuthorities(Collection<GrantedAuthority> authorities);
}
@@ -15,15 +15,21 @@
package org.springframework.security.access.hierarchicalroles;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
/**
* <p>
@@ -98,7 +104,7 @@ public class RoleHierarchyImpl implements RoleHierarchy {
buildRolesReachableInOneOrMoreStepsMap();
}
public List<GrantedAuthority> getReachableGrantedAuthorities(List<GrantedAuthority> authorities) {
public Collection<GrantedAuthority> getReachableGrantedAuthorities(Collection<GrantedAuthority> authorities) {
if (authorities == null || authorities.isEmpty()) {
return null;
}
@@ -125,40 +131,40 @@ public class RoleHierarchyImpl implements RoleHierarchy {
}
// SEC-863
private void addReachableRoles(Set<GrantedAuthority> reachableRoles,
GrantedAuthority authority) {
Iterator<GrantedAuthority> iterator = reachableRoles.iterator();
while (iterator.hasNext()) {
GrantedAuthority testAuthority = iterator.next();
String testKey = testAuthority.getAuthority();
if ((testKey != null) && (testKey.equals(authority.getAuthority()))) {
return;
}
}
reachableRoles.add(authority);
}
private void addReachableRoles(Set<GrantedAuthority> reachableRoles,
GrantedAuthority authority) {
Iterator<GrantedAuthority> iterator = reachableRoles.iterator();
while (iterator.hasNext()) {
GrantedAuthority testAuthority = iterator.next();
String testKey = testAuthority.getAuthority();
if ((testKey != null) && (testKey.equals(authority.getAuthority()))) {
return;
}
}
reachableRoles.add(authority);
}
// SEC-863
private Set<GrantedAuthority> getRolesReachableInOneOrMoreSteps(
GrantedAuthority authority) {
if (authority.getAuthority() == null) {
return null;
}
Iterator<GrantedAuthority> iterator = rolesReachableInOneOrMoreStepsMap.keySet().iterator();
while (iterator.hasNext()) {
GrantedAuthority testAuthority = iterator.next();
String testKey = testAuthority.getAuthority();
if ((testKey != null) && (testKey.equals(authority.getAuthority()))) {
return rolesReachableInOneOrMoreStepsMap.get(testAuthority);
}
}
return null;
}
private Set<GrantedAuthority> getRolesReachableInOneOrMoreSteps(
GrantedAuthority authority) {
if (authority.getAuthority() == null) {
return null;
}
Iterator<GrantedAuthority> iterator = rolesReachableInOneOrMoreStepsMap.keySet().iterator();
while (iterator.hasNext()) {
GrantedAuthority testAuthority = iterator.next();
String testKey = testAuthority.getAuthority();
if ((testKey != null) && (testKey.equals(authority.getAuthority()))) {
return rolesReachableInOneOrMoreStepsMap.get(testAuthority);
}
}
return null;
}
/**
* Parse input and build the map for the roles reachable in one step: the higher role will become a key that
* references a set of the reachable lower roles.
@@ -14,8 +14,9 @@
package org.springframework.security.access.hierarchicalroles;
import java.util.List;
import java.util.Collection;
import org.springframework.security.access.vote.RoleHierarchyVoter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@@ -48,7 +49,7 @@ public class UserDetailsWrapper implements UserDetails {
return userDetails.isAccountNonLocked();
}
public List<GrantedAuthority> getAuthorities() {
public Collection<GrantedAuthority> getAuthorities() {
return roleHierarchy.getReachableGrantedAuthorities(userDetails.getAuthorities());
}
@@ -72,4 +73,4 @@ public class UserDetailsWrapper implements UserDetails {
return userDetails;
}
}
}
@@ -16,8 +16,7 @@
package org.springframework.security.access.intercept;
import java.util.Arrays;
import java.util.List;
import java.util.Collection;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.Authentication;
@@ -45,7 +44,7 @@ public class RunAsUserToken extends AbstractAuthenticationToken {
this(key, principal, credentials, Arrays.asList(authorities), originalAuthentication);
}
public RunAsUserToken(String key, Object principal, Object credentials, List<GrantedAuthority> authorities,
public RunAsUserToken(String key, Object principal, Object credentials, Collection<GrantedAuthority> authorities,
Class<? extends Authentication> originalAuthentication) {
super(authorities);
this.keyHash = key.hashCode();
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.util.Assert;
@@ -177,8 +178,8 @@ public class LabelBasedAclVoter extends AbstractAclVoter {
*/
List<String> userLabels = new ArrayList<String>();
for (int i = 0; i < authentication.getAuthorities().size(); i++) {
String userLabel = authentication.getAuthorities().get(i).getAuthority();
for (GrantedAuthority authority : authentication.getAuthorities()) {
String userLabel = authority.getAuthority();
if (labelMap.containsKey(userLabel)) {
userLabels.add(userLabel);
logger.debug("Adding " + userLabel + " to <<<" + authentication.getName()
@@ -1,6 +1,6 @@
package org.springframework.security.access.vote;
import java.util.List;
import java.util.Collection;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
import org.springframework.security.core.Authentication;
@@ -26,7 +26,7 @@ public class RoleHierarchyVoter extends RoleVoter {
* Calls the <tt>RoleHierarchy</tt> to obtain the complete set of user authorities.
*/
@Override
List<GrantedAuthority> extractAuthorities(Authentication authentication) {
Collection<GrantedAuthority> extractAuthorities(Authentication authentication) {
return roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities());
}
}
@@ -15,6 +15,7 @@
package org.springframework.security.access.vote;
import java.util.Collection;
import java.util.List;
import org.springframework.security.access.AccessDecisionVoter;
@@ -94,7 +95,7 @@ public class RoleVoter implements AccessDecisionVoter {
public int vote(Authentication authentication, Object object, List<ConfigAttribute> attributes) {
int result = ACCESS_ABSTAIN;
List<GrantedAuthority> authorities = extractAuthorities(authentication);
Collection<GrantedAuthority> authorities = extractAuthorities(authentication);
for (ConfigAttribute attribute : attributes) {
if (this.supports(attribute)) {
@@ -112,7 +113,7 @@ public class RoleVoter implements AccessDecisionVoter {
return result;
}
List<GrantedAuthority> extractAuthorities(Authentication authentication) {
Collection<GrantedAuthority> extractAuthorities(Authentication authentication) {
return authentication.getAuthorities();
}
}
@@ -16,8 +16,9 @@
package org.springframework.security.authentication;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
@@ -37,7 +38,7 @@ public abstract class AbstractAuthenticationToken implements Authentication {
//~ Instance fields ================================================================================================
private Object details;
private final List<GrantedAuthority> authorities;
private final Collection<GrantedAuthority> authorities;
private boolean authenticated = false;
//~ Constructors ===================================================================================================
@@ -52,17 +53,18 @@ public abstract class AbstractAuthenticationToken implements Authentication {
* Authentication#getAuthorities()}<code>null</code> should only be
* presented if the principal has not been authenticated).
*/
public AbstractAuthenticationToken(List<GrantedAuthority> authorities) {
public AbstractAuthenticationToken(Collection<GrantedAuthority> authorities) {
if (authorities == null) {
this.authorities = null;
} else {
for (int i = 0; i < authorities.size(); i++) {
if(authorities.get(i) == null) {
throw new IllegalArgumentException("Granted authority element " + i
+ " is null - GrantedAuthority[] cannot contain any null elements");
for (GrantedAuthority a: authorities) {
if(a == null) {
throw new IllegalArgumentException("Authorities collection cannot contain any null elements");
}
}
this.authorities = Collections.unmodifiableList(authorities);
ArrayList<GrantedAuthority> temp = new ArrayList<GrantedAuthority>(authorities.size());
temp.addAll(authorities);
this.authorities = Collections.unmodifiableList(temp);
}
}
@@ -116,7 +118,7 @@ public abstract class AbstractAuthenticationToken implements Authentication {
return this.isAuthenticated() == test.isAuthenticated();
}
public List<GrantedAuthority> getAuthorities() {
public Collection<GrantedAuthority> getAuthorities() {
return authorities;
}
@@ -16,8 +16,7 @@
package org.springframework.security.authentication;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
@@ -39,13 +38,6 @@ public class RememberMeAuthenticationToken extends AbstractAuthenticationToken i
//~ Constructors ===================================================================================================
/**
* @deprecated
*/
public RememberMeAuthenticationToken(String key, Object principal, GrantedAuthority[] authorities) {
this(key, principal, Arrays.asList(authorities));
}
/**
* Constructor.
*
@@ -55,7 +47,7 @@ public class RememberMeAuthenticationToken extends AbstractAuthenticationToken i
*
* @throws IllegalArgumentException if a <code>null</code> was passed
*/
public RememberMeAuthenticationToken(String key, Object principal, List<GrantedAuthority> authorities) {
public RememberMeAuthenticationToken(String key, Object principal, Collection<GrantedAuthority> authorities) {
super(authorities);
if ((key == null) || ("".equals(key)) || (principal == null) || "".equals(principal)) {
@@ -16,7 +16,7 @@
package org.springframework.security.authentication;
import java.util.Arrays;
import java.util.List;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
@@ -69,7 +69,7 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT
* @param credentials
* @param authorities
*/
public UsernamePasswordAuthenticationToken(Object principal, Object credentials, List<GrantedAuthority> authorities) {
public UsernamePasswordAuthenticationToken(Object principal, Object credentials, Collection<GrantedAuthority> authorities) {
super(authorities);
this.principal = principal;
this.credentials = credentials;
@@ -15,6 +15,8 @@
package org.springframework.security.authentication.rcp;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
@@ -43,6 +45,6 @@ public interface RemoteAuthenticationManager {
*
* @throws RemoteAuthenticationException if the authentication failed.
*/
GrantedAuthority[] attemptAuthentication(String username, String password)
Collection<GrantedAuthority> attemptAuthentication(String username, String password)
throws RemoteAuthenticationException;
}
@@ -15,16 +15,13 @@
package org.springframework.security.authentication.rcp;
import java.util.List;
import java.util.Collection;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
@@ -48,14 +45,14 @@ public class RemoteAuthenticationManagerImpl implements RemoteAuthenticationMana
Assert.notNull(this.authenticationManager, "authenticationManager is required");
}
public GrantedAuthority[] attemptAuthentication(String username, String password)
public Collection<GrantedAuthority> attemptAuthentication(String username, String password)
throws RemoteAuthenticationException {
UsernamePasswordAuthenticationToken request = new UsernamePasswordAuthenticationToken(username, password);
try {
List<GrantedAuthority> authorities = authenticationManager.authenticate(request).getAuthorities();
Collection<GrantedAuthority> authorities = authenticationManager.authenticate(request).getAuthorities();
return authorities == null ? null : authorities.toArray(new GrantedAuthority[authorities.size()]);
return authorities;
} catch (AuthenticationException authEx) {
throw new RemoteAuthenticationException(authEx.getMessage());
}
@@ -15,17 +15,14 @@
package org.springframework.security.authentication.rcp;
import java.util.Arrays;
import java.util.Collection;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
@@ -62,9 +59,9 @@ public class RemoteAuthenticationProvider implements AuthenticationProvider, Ini
throws AuthenticationException {
String username = authentication.getPrincipal().toString();
String password = authentication.getCredentials().toString();
GrantedAuthority[] authorities = remoteAuthenticationManager.attemptAuthentication(username, password);
Collection<GrantedAuthority> authorities = remoteAuthenticationManager.attemptAuthentication(username, password);
return new UsernamePasswordAuthenticationToken(username, password, Arrays.asList(authorities));
return new UsernamePasswordAuthenticationToken(username, password, authorities);
}
public RemoteAuthenticationManager getRemoteAuthenticationManager() {
@@ -18,7 +18,7 @@ package org.springframework.security.core;
import java.io.Serializable;
import java.security.Principal;
import java.util.List;
import java.util.Collection;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -56,7 +56,7 @@ public interface Authentication extends Principal, Serializable {
*
* @return the authorities granted to the principal, or <code>null</code> if authentication has not been completed
*/
List<GrantedAuthority> getAuthorities();
Collection<GrantedAuthority> getAuthorities();
/**
* The credentials that prove the principal is correct. This is usually a password, but could be anything
@@ -1,6 +1,7 @@
package org.springframework.security.core.authority;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -35,10 +36,10 @@ public abstract class AuthorityUtils {
* Converts an array of GrantedAuthority objects to a Set.
* @return a Set of the Strings obtained from each call to GrantedAuthority.getAuthority()
*/
public static Set<String> authorityListToSet(List<GrantedAuthority> authorities) {
Set<String> set = new HashSet<String>(authorities.size());
public static Set<String> authorityListToSet(Collection<GrantedAuthority> userAuthorities) {
Set<String> set = new HashSet<String>(userAuthorities.size());
for (GrantedAuthority authority: authorities) {
for (GrantedAuthority authority: userAuthorities) {
set.add(authority.getAuthority());
}
@@ -17,6 +17,7 @@ package org.springframework.security.core.userdetails;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
@@ -80,7 +81,7 @@ public class User implements UserDetails {
* <code>GrantedAuthority[]</code> array
*/
public User(String username, String password, boolean enabled, boolean accountNonExpired,
boolean credentialsNonExpired, boolean accountNonLocked, List<GrantedAuthority> authorities) {
boolean credentialsNonExpired, boolean accountNonLocked, Collection<GrantedAuthority> authorities) {
if (((username == null) || "".equals(username)) || (password == null)) {
throw new IllegalArgumentException("Cannot pass null or empty values to constructor");
@@ -118,7 +119,7 @@ public class User implements UserDetails {
&& (this.isEnabled() == user.isEnabled()));
}
public List<GrantedAuthority> getAuthorities() {
public Collection<GrantedAuthority> getAuthorities() {
return authorities;
}
@@ -182,7 +183,7 @@ public class User implements UserDetails {
return enabled;
}
private static List<GrantedAuthority> sortAuthorities(List<GrantedAuthority> authorities) {
private static List<GrantedAuthority> sortAuthorities(Collection<GrantedAuthority> authorities) {
Assert.notNull(authorities, "Cannot pass a null GrantedAuthority array");
// Ensure array iteration order is predictable (as per UserDetails.getAuthorities() contract and SEC-xxx)
SortedSet<GrantedAuthority> sorter = new TreeSet<GrantedAuthority>();
@@ -19,7 +19,7 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import java.io.Serializable;
import java.util.List;
import java.util.Collection;
/**
@@ -60,7 +60,7 @@ public interface UserDetails extends Serializable {
*
* @return the authorities, sorted by natural key (never <code>null</code>)
*/
List<GrantedAuthority> getAuthorities();
Collection<GrantedAuthority> getAuthorities();
/**
* Returns the password used to authenticate the user. Cannot return <code>null</code>.
@@ -25,6 +25,7 @@ import org.apache.commons.logging.LogFactory;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
/**
@@ -171,9 +172,8 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
}
private void insertUserAuthorities(UserDetails user) {
for (int i=0; i < user.getAuthorities().size(); i++) {
getJdbcTemplate().update(createAuthoritySql,
new Object[] {user.getUsername(), user.getAuthorities().get(i).getAuthority()});
for (GrantedAuthority auth : user.getAuthorities()) {
getJdbcTemplate().update(createAuthoritySql, user.getUsername(), auth.getAuthority());
}
}
@@ -437,12 +437,12 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
validateAuthorities(user.getAuthorities());
}
private void validateAuthorities(List<GrantedAuthority> authorities) {
private void validateAuthorities(Collection<GrantedAuthority> authorities) {
Assert.notNull(authorities, "Authorities list must not be null");
for (int i=0; i < authorities.size(); i++) {
Assert.notNull(authorities.get(i), "Authorities list contains a null entry");
Assert.hasText(authorities.get(i).getAuthority(), "getAuthority() method must return a non-empty string");
for (GrantedAuthority authority : authorities) {
Assert.notNull(authority, "Authorities list contains a null entry");
Assert.hasText(authority.getAuthority(), "getAuthority() method must return a non-empty string");
}
}
}
@@ -2,7 +2,7 @@ package org.springframework.security.access.expression;
import static org.junit.Assert.*;
import java.util.List;
import java.util.Collection;
import org.junit.Test;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
@@ -24,7 +24,7 @@ public class SecurityExpressionRootTests {
new SecurityExpressionRoot(new TestingAuthenticationToken("joe", "pass", "A", "B")) {};
root.setRoleHierarchy(new RoleHierarchy() {
public List<GrantedAuthority> getReachableGrantedAuthorities(List<GrantedAuthority> authorities) {
public Collection<GrantedAuthority> getReachableGrantedAuthorities(Collection<GrantedAuthority> authorities) {
return AuthorityUtils.createAuthorityList("C");
}
});
@@ -15,6 +15,7 @@
package org.springframework.security.access.hierarchicalroles;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.springframework.security.core.GrantedAuthority;
@@ -27,7 +28,7 @@ import org.apache.commons.collections.CollectionUtils;
*/
public abstract class HierarchicalRolesTestHelper {
public static boolean containTheSameGrantedAuthorities(List<GrantedAuthority> authorities1, List<GrantedAuthority> authorities2) {
public static boolean containTheSameGrantedAuthorities(Collection<GrantedAuthority> authorities1, Collection<GrantedAuthority> authorities2) {
if (authorities1 == null && authorities2 == null) {
return true;
}
@@ -38,7 +39,7 @@ public abstract class HierarchicalRolesTestHelper {
return CollectionUtils.isEqualCollection(authorities1, authorities2);
}
public static boolean containTheSameGrantedAuthoritiesCompareByAuthorityString(List<GrantedAuthority> authorities1, List<GrantedAuthority> authorities2) {
public static boolean containTheSameGrantedAuthoritiesCompareByAuthorityString(Collection<GrantedAuthority> authorities1, Collection<GrantedAuthority> authorities2) {
if (authorities1 == null && authorities2 == null) {
return true;
}
@@ -46,10 +47,10 @@ public abstract class HierarchicalRolesTestHelper {
if (authorities1 == null || authorities2 == null) {
return false;
}
return CollectionUtils.isEqualCollection(toListOfAuthorityStrings(authorities1), toListOfAuthorityStrings(authorities2));
return CollectionUtils.isEqualCollection(toCollectionOfAuthorityStrings(authorities1), toCollectionOfAuthorityStrings(authorities2));
}
public static List<String> toListOfAuthorityStrings(List<GrantedAuthority> authorities) {
public static List<String> toCollectionOfAuthorityStrings(Collection<GrantedAuthority> authorities) {
if (authorities == null) {
return null;
}
@@ -17,6 +17,7 @@ package org.springframework.security.access.hierarchicalroles;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
@@ -56,11 +57,11 @@ public class TestHelperTests {
// SEC-863
@Test
public void testToListOfAuthorityStrings() {
List<GrantedAuthority> authorities1 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B");
List<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_B", "ROLE_A");
List<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_C");
List<GrantedAuthority> authorities4 = AuthorityUtils.createAuthorityList("ROLE_A");
List<GrantedAuthority> authorities5 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_A");
Collection<GrantedAuthority> authorities1 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B");
Collection<GrantedAuthority> authorities2 = AuthorityUtils.createAuthorityList("ROLE_B", "ROLE_A");
Collection<GrantedAuthority> authorities3 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_C");
Collection<GrantedAuthority> authorities4 = AuthorityUtils.createAuthorityList("ROLE_A");
Collection<GrantedAuthority> authorities5 = AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_A");
List<String> authoritiesStrings1 = new ArrayList<String>();
authoritiesStrings1.add("ROLE_A");
@@ -82,19 +83,19 @@ public class TestHelperTests {
authoritiesStrings5.add("ROLE_A");
assertTrue(CollectionUtils.isEqualCollection(
HierarchicalRolesTestHelper.toListOfAuthorityStrings(authorities1), authoritiesStrings1));
HierarchicalRolesTestHelper.toCollectionOfAuthorityStrings(authorities1), authoritiesStrings1));
assertTrue(CollectionUtils.isEqualCollection(
HierarchicalRolesTestHelper.toListOfAuthorityStrings(authorities2), authoritiesStrings2));
HierarchicalRolesTestHelper.toCollectionOfAuthorityStrings(authorities2), authoritiesStrings2));
assertTrue(CollectionUtils.isEqualCollection(
HierarchicalRolesTestHelper.toListOfAuthorityStrings(authorities3), authoritiesStrings3));
HierarchicalRolesTestHelper.toCollectionOfAuthorityStrings(authorities3), authoritiesStrings3));
assertTrue(CollectionUtils.isEqualCollection(
HierarchicalRolesTestHelper.toListOfAuthorityStrings(authorities4), authoritiesStrings4));
HierarchicalRolesTestHelper.toCollectionOfAuthorityStrings(authorities4), authoritiesStrings4));
assertTrue(CollectionUtils.isEqualCollection(
HierarchicalRolesTestHelper.toListOfAuthorityStrings(authorities5), authoritiesStrings5));
HierarchicalRolesTestHelper.toCollectionOfAuthorityStrings(authorities5), authoritiesStrings5));
}
// SEC-863
@@ -15,12 +15,11 @@
package org.springframework.security.access.intercept;
import java.util.Set;
import junit.framework.TestCase;
import org.springframework.security.access.SecurityConfig;
import org.springframework.security.access.intercept.RunAsManager;
import org.springframework.security.access.intercept.RunAsManagerImpl;
import org.springframework.security.access.intercept.RunAsUserToken;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.AuthorityUtils;
@@ -57,16 +56,18 @@ public class RunAsManagerImplTests extends TestCase {
runAs.setKey("my_password");
runAs.setRolePrefix("FOOBAR_");
Authentication resultingToken = runAs.buildRunAs(inputToken, new Object(), SecurityConfig.createList("RUN_AS_SOMETHING"));
Authentication result = runAs.buildRunAs(inputToken, new Object(), SecurityConfig.createList("RUN_AS_SOMETHING"));
assertTrue("Should have returned a RunAsUserToken", resultingToken instanceof RunAsUserToken);
assertEquals(inputToken.getPrincipal(), resultingToken.getPrincipal());
assertEquals(inputToken.getCredentials(), resultingToken.getCredentials());
assertEquals("FOOBAR_RUN_AS_SOMETHING", resultingToken.getAuthorities().get(0).getAuthority());
assertEquals("ONE", resultingToken.getAuthorities().get(1).getAuthority());
assertEquals("TWO", resultingToken.getAuthorities().get(2).getAuthority());
assertTrue("Should have returned a RunAsUserToken", result instanceof RunAsUserToken);
assertEquals(inputToken.getPrincipal(), result.getPrincipal());
assertEquals(inputToken.getCredentials(), result.getCredentials());
Set<String> authorities = AuthorityUtils.authorityListToSet(result.getAuthorities());
RunAsUserToken resultCast = (RunAsUserToken) resultingToken;
assertTrue(authorities.contains("FOOBAR_RUN_AS_SOMETHING"));
assertTrue(authorities.contains("ONE"));
assertTrue(authorities.contains("TWO"));
RunAsUserToken resultCast = (RunAsUserToken) result;
assertEquals("my_password".hashCode(), resultCast.getKeyHash());
}
@@ -77,19 +78,21 @@ public class RunAsManagerImplTests extends TestCase {
RunAsManagerImpl runAs = new RunAsManagerImpl();
runAs.setKey("my_password");
Authentication resultingToken = runAs.buildRunAs(inputToken, new Object(), SecurityConfig.createList("RUN_AS_SOMETHING"));
Authentication result = runAs.buildRunAs(inputToken, new Object(), SecurityConfig.createList("RUN_AS_SOMETHING"));
if (!(resultingToken instanceof RunAsUserToken)) {
if (!(result instanceof RunAsUserToken)) {
fail("Should have returned a RunAsUserToken");
}
assertEquals(inputToken.getPrincipal(), resultingToken.getPrincipal());
assertEquals(inputToken.getCredentials(), resultingToken.getCredentials());
assertEquals("ROLE_RUN_AS_SOMETHING", resultingToken.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_ONE", resultingToken.getAuthorities().get(1).getAuthority());
assertEquals("ROLE_TWO", resultingToken.getAuthorities().get(2).getAuthority());
assertEquals(inputToken.getPrincipal(), result.getPrincipal());
assertEquals(inputToken.getCredentials(), result.getCredentials());
RunAsUserToken resultCast = (RunAsUserToken) resultingToken;
Set<String> authorities = AuthorityUtils.authorityListToSet(result.getAuthorities());
assertTrue(authorities.contains("ROLE_RUN_AS_SOMETHING"));
assertTrue(authorities.contains("ROLE_ONE"));
assertTrue(authorities.contains("ROLE_TWO"));
RunAsUserToken resultCast = (RunAsUserToken) result;
assertEquals("my_password".hashCode(), resultCast.getKeyHash());
}
@@ -21,7 +21,6 @@ import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
@@ -48,7 +47,7 @@ public class AbstractAuthenticationTokenTests {
@Test(expected=UnsupportedOperationException.class)
public void testAuthoritiesAreImmutable() {
MockAuthenticationImpl token = new MockAuthenticationImpl("Test", "Password", authorities);
List<GrantedAuthority> gotAuthorities = token.getAuthorities();
List<GrantedAuthority> gotAuthorities = (List<GrantedAuthority>) token.getAuthorities();
assertNotSame(authorities, gotAuthorities);
gotAuthorities.set(0, new GrantedAuthorityImpl("ROLE_SUPER_USER"));
@@ -20,6 +20,7 @@ import junit.framework.TestCase;
import org.springframework.security.authentication.TestingAuthenticationProvider;
import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.AuthorityUtils;
/**
* Tests {@link TestingAuthenticationProvider}.
@@ -39,8 +40,8 @@ public class TestingAuthenticationProviderTests extends TestCase {
TestingAuthenticationToken castResult = (TestingAuthenticationToken) result;
assertEquals("Test", castResult.getPrincipal());
assertEquals("Password", castResult.getCredentials());
assertEquals("ROLE_ONE", castResult.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", castResult.getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(castResult.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(castResult.getAuthorities()).contains("ROLE_TWO"));
}
public void testSupports() {
@@ -68,8 +68,8 @@ public class UsernamePasswordAuthenticationTokenTests {
AuthorityUtils.createAuthorityList("ROLE_ONE", "ROLE_TWO"));
assertEquals("Test", token.getPrincipal());
assertEquals("Password", token.getCredentials());
assertEquals("ROLE_ONE", token.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", token.getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_TWO"));
}
@Test(expected=NoSuchMethodException.class)
@@ -76,8 +76,8 @@ public class AnonymousAuthenticationTokenTests extends TestCase {
assertEquals("key".hashCode(), token.getKeyHash());
assertEquals("Test", token.getPrincipal());
assertEquals("", token.getCredentials());
assertEquals("ROLE_ONE", token.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", token.getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_TWO"));
assertTrue(token.isAuthenticated());
}
@@ -19,7 +19,8 @@ import java.util.List;
import junit.framework.TestCase;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.security.authentication.AccountExpiredException;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.BadCredentialsException;
@@ -28,7 +29,6 @@ import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
@@ -41,10 +41,6 @@ import org.springframework.security.core.userdetails.cache.EhCacheBasedUserCache
import org.springframework.security.core.userdetails.cache.NullUserCache;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;
/**
* Tests {@link DaoAuthenticationProvider}.
*
@@ -267,8 +263,8 @@ public class DaoAuthenticationProviderTests extends TestCase {
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result;
assertEquals(User.class, castResult.getPrincipal().getClass());
assertEquals("koala", castResult.getCredentials());
assertEquals("ROLE_ONE", castResult.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", castResult.getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(castResult.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(castResult.getAuthorities()).contains("ROLE_TWO"));
assertEquals("192.168.0.1", castResult.getDetails());
}
@@ -312,13 +308,12 @@ public class DaoAuthenticationProviderTests extends TestCase {
fail("Should have returned instance of UsernamePasswordAuthenticationToken");
}
UsernamePasswordAuthenticationToken castResult = (UsernamePasswordAuthenticationToken) result;
assertEquals(User.class, castResult.getPrincipal().getClass());
assertEquals(User.class, result.getPrincipal().getClass());
// We expect original credentials user submitted to be returned
assertEquals("koala", castResult.getCredentials());
assertEquals("ROLE_ONE", castResult.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", castResult.getAuthorities().get(1).getAuthority());
assertEquals("koala", result.getCredentials());
assertTrue(AuthorityUtils.authorityListToSet(result.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(result.getAuthorities()).contains("ROLE_TWO"));
}
public void testAuthenticatesWithForcePrincipalAsString() {
@@ -23,6 +23,7 @@ import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.security.Security;
import java.util.Collection;
import java.util.List;
import javax.security.auth.login.LoginContext;
@@ -192,7 +193,7 @@ public class JaasAuthenticationProviderTests {
assertNotNull(jaasProvider.getLoginConfig());
assertNotNull(jaasProvider.getLoginContextName());
List<GrantedAuthority> list = auth.getAuthorities();
Collection<GrantedAuthority> list = auth.getAuthorities();
assertTrue("GrantedAuthorities should contain ROLE_TEST1", list.contains(new GrantedAuthorityImpl("ROLE_TEST1")));
assertTrue("GrantedAuthorities should contain ROLE_TEST2", list.contains(new GrantedAuthorityImpl("ROLE_TEST2")));
@@ -201,11 +202,9 @@ public class JaasAuthenticationProviderTests {
boolean foundit = false;
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
if (obj instanceof JaasGrantedAuthority) {
JaasGrantedAuthority grant = (JaasGrantedAuthority) obj;
for (GrantedAuthority a : list) {
if (a instanceof JaasGrantedAuthority) {
JaasGrantedAuthority grant = (JaasGrantedAuthority) a;
assertNotNull("Principal was null on JaasGrantedAuthority", grant.getPrincipal());
foundit = true;
}
@@ -15,16 +15,14 @@
package org.springframework.security.authentication.rcp;
import java.util.Collection;
import junit.framework.TestCase;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.rcp.RemoteAuthenticationException;
import org.springframework.security.authentication.rcp.RemoteAuthenticationManager;
import org.springframework.security.authentication.rcp.RemoteAuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.authority.AuthorityUtils;
/**
@@ -36,14 +34,6 @@ import org.springframework.security.core.authority.GrantedAuthorityImpl;
public class RemoteAuthenticationProviderTests extends TestCase {
//~ Methods ========================================================================================================
public static void main(String[] args) {
junit.textui.TestRunner.run(RemoteAuthenticationProviderTests.class);
}
public final void setUp() throws Exception {
super.setUp();
}
public void testExceptionsGetPassedBackToCaller() {
RemoteAuthenticationProvider provider = new RemoteAuthenticationProvider();
provider.setRemoteAuthenticationManager(new MockRemoteAuthenticationManager(false));
@@ -85,7 +75,7 @@ public class RemoteAuthenticationProviderTests extends TestCase {
Authentication result = provider.authenticate(new UsernamePasswordAuthenticationToken("rod", "password"));
assertEquals("rod", result.getPrincipal());
assertEquals("password", result.getCredentials());
assertEquals("foo", result.getAuthorities().get(0).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(result.getAuthorities()).contains("foo"));
}
public void testSupports() {
@@ -102,10 +92,10 @@ public class RemoteAuthenticationProviderTests extends TestCase {
this.grantAccess = grantAccess;
}
public GrantedAuthority[] attemptAuthentication(String username, String password)
public Collection<GrantedAuthority> attemptAuthentication(String username, String password)
throws RemoteAuthenticationException {
if (grantAccess) {
return new GrantedAuthority[] {new GrantedAuthorityImpl("foo")};
return AuthorityUtils.createAuthorityList("foo");
} else {
throw new RemoteAuthenticationException("as requested");
}
@@ -75,8 +75,8 @@ public class RememberMeAuthenticationTokenTests extends TestCase {
assertEquals("key".hashCode(), token.getKeyHash());
assertEquals("Test", token.getPrincipal());
assertEquals("", token.getCredentials());
assertEquals("ROLE_ONE", token.getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", token.getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(token.getAuthorities()).contains("ROLE_TWO"));
assertTrue(token.isAuthenticated());
}
@@ -106,8 +106,8 @@ public class UserTests extends TestCase {
assertEquals("rod", user.getUsername());
assertEquals("koala", user.getPassword());
assertTrue(user.isEnabled());
assertEquals(new GrantedAuthorityImpl("ROLE_ONE"), user.getAuthorities().get(0));
assertEquals(new GrantedAuthorityImpl("ROLE_TWO"), user.getAuthorities().get(1));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ROLE_TWO"));
assertTrue(user.toString().indexOf("rod") != -1);
}
@@ -15,14 +15,12 @@
package org.springframework.security.core.userdetails.jdbc;
import java.util.HashSet;
import junit.framework.TestCase;
import org.springframework.security.PopulatedDatabase;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;
/**
@@ -59,18 +57,15 @@ public class JdbcDaoImplTests extends TestCase {
assertEquals("koala", user.getPassword());
assertTrue(user.isEnabled());
HashSet<String> authorities = new HashSet<String>(2);
authorities.add(user.getAuthorities().get(0).getAuthority());
authorities.add(user.getAuthorities().get(1).getAuthority());
assertTrue(authorities.contains("ROLE_TELLER"));
assertTrue(authorities.contains("ROLE_SUPERVISOR"));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ROLE_TELLER"));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ROLE_SUPERVISOR"));
}
public void testCheckDaoOnlyReturnsGrantedAuthoritiesGrantedToUser() throws Exception {
JdbcDaoImpl dao = makePopulatedJdbcDao();
UserDetails user = dao.loadUserByUsername("scott");
assertEquals("ROLE_TELLER", user.getAuthorities().get(0).getAuthority());
assertEquals(1, user.getAuthorities().size());
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ROLE_TELLER"));
}
public void testCheckDaoReturnsCorrectDisabledProperty() throws Exception {
@@ -124,11 +119,8 @@ public class JdbcDaoImplTests extends TestCase {
assertEquals("rod", user.getUsername());
assertEquals(2, user.getAuthorities().size());
HashSet<String> authorities = new HashSet<String>(2);
authorities.add(user.getAuthorities().get(0).getAuthority());
authorities.add(user.getAuthorities().get(1).getAuthority());
assertTrue(authorities.contains("ARBITRARY_PREFIX_ROLE_TELLER"));
assertTrue(authorities.contains("ARBITRARY_PREFIX_ROLE_SUPERVISOR"));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ARBITRARY_PREFIX_ROLE_TELLER"));
assertTrue(AuthorityUtils.authorityListToSet(user.getAuthorities()).contains("ARBITRARY_PREFIX_ROLE_SUPERVISOR"));
}
public void testGroupAuthoritiesAreLoadedCorrectly() throws Exception {
@@ -17,6 +17,7 @@ package org.springframework.security.core.userdetails.memory;
import junit.framework.TestCase;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.memory.UserMap;
import org.springframework.security.core.userdetails.memory.UserMapEditor;
@@ -63,8 +64,8 @@ public class UserMapEditorTests extends TestCase {
UserMap map = (UserMap) editor.getValue();
assertEquals("rod", map.getUser("rod").getUsername());
assertEquals("koala", map.getUser("rod").getPassword());
assertEquals("ROLE_ONE", map.getUser("rod").getAuthorities().get(0).getAuthority());
assertEquals("ROLE_TWO", map.getUser("rod").getAuthorities().get(1).getAuthority());
assertTrue(AuthorityUtils.authorityListToSet(map.getUser("rod").getAuthorities()).contains("ROLE_ONE"));
assertTrue(AuthorityUtils.authorityListToSet(map.getUser("rod").getAuthorities()).contains("ROLE_TWO"));
assertTrue(map.getUser("rod").isEnabled());
}