|
@@ -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.
|