Added template method for role creation, as requested in the forum.

This commit is contained in:
Luke Taylor 2006-06-13 13:18:45 +00:00
parent 7475906218
commit b0caa72e80
1 changed files with 27 additions and 9 deletions

View File

@ -16,6 +16,7 @@
package org.acegisecurity.userdetails.ldap;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.ldap.LdapEntryMapper;
@ -74,17 +75,12 @@ public class LdapUserDetailsMapper implements LdapEntryMapper {
NamingEnumeration attributeRoles = roleAttribute.getAll();
while (attributeRoles.hasMore()) {
Object role = attributeRoles.next();
GrantedAuthority authority = createAuthority(attributeRoles.next());
// We only handle Strings for the time being
if (role instanceof String) {
if (convertToUpperCase) {
role = ((String) role).toUpperCase();
}
essence.addAuthority(new GrantedAuthorityImpl(rolePrefix + role));
if(authority != null) {
essence.addAuthority(authority);
} else {
logger.warn("Non-String value found for role attribute " + roleAttribute.getID());
logger.debug("Failed to create an authority value from attribute with Id: " + roleAttribute.getID());
}
}
}
@ -92,6 +88,28 @@ public class LdapUserDetailsMapper implements LdapEntryMapper {
return essence;
}
/**
* Creates a GrantedAuthority from a role attribute. Override to customize
* authority object creation.
* <p>
* The default implementation converts string attributes to roles, making use of the <tt>rolePrefix</tt>
* and <tt>convertToUpperCase</tt> properties. Non-String attributes are ignored.
* </p>
*
* @param role the attribute returned from
* @return the authority to be added to the list of authorities for the user, or null
* if this attribute should be ignored.
*/
protected GrantedAuthority createAuthority(Object role) {
if (role instanceof String) {
if (convertToUpperCase) {
role = ((String) role).toUpperCase();
}
return new GrantedAuthorityImpl(rolePrefix + role);
}
return null;
}
/**
* Determines whether role field values will be converted to upper case when loaded.
* The default is true.