|
@@ -16,32 +16,27 @@
|
|
|
package org.springframework.security.ldap;
|
|
|
|
|
|
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
|
|
-
|
|
|
-import org.springframework.util.Assert;
|
|
|
import org.springframework.ldap.core.ContextExecutor;
|
|
|
+import org.springframework.ldap.core.ContextMapper;
|
|
|
import org.springframework.ldap.core.ContextSource;
|
|
|
import org.springframework.ldap.core.DirContextAdapter;
|
|
|
-import org.springframework.ldap.core.DistinguishedName;
|
|
|
-import org.springframework.ldap.core.AttributesMapper;
|
|
|
-import org.springframework.ldap.core.AttributesMapperCallbackHandler;
|
|
|
import org.springframework.ldap.core.DirContextOperations;
|
|
|
+import org.springframework.ldap.core.DistinguishedName;
|
|
|
+import org.springframework.util.Assert;
|
|
|
+
|
|
|
import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.Set;
|
|
|
-import java.util.List;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.text.MessageFormat;
|
|
|
-
|
|
|
import javax.naming.NamingEnumeration;
|
|
|
import javax.naming.NamingException;
|
|
|
-import javax.naming.NameClassPair;
|
|
|
-import javax.naming.directory.Attribute;
|
|
|
import javax.naming.directory.Attributes;
|
|
|
import javax.naming.directory.DirContext;
|
|
|
import javax.naming.directory.SearchControls;
|
|
|
import javax.naming.directory.SearchResult;
|
|
|
+import java.text.MessageFormat;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.Arrays;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -94,8 +89,6 @@ public class SpringSecurityLdapTemplate extends org.springframework.ldap.core.Ld
|
|
|
ctls.setReturningAttributes(NO_ATTRS);
|
|
|
ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
|
|
|
|
|
|
-// String relativeName = LdapUtils.getRelativeName(dn, ctx);
|
|
|
-
|
|
|
NamingEnumeration results = ctx.search(dn, comparisonFilter, new Object[] {value}, ctls);
|
|
|
|
|
|
return Boolean.valueOf(results.hasMore());
|
|
@@ -107,26 +100,6 @@ public class SpringSecurityLdapTemplate extends org.springframework.ldap.core.Ld
|
|
|
return matches.booleanValue();
|
|
|
}
|
|
|
|
|
|
-// public boolean nameExists(final String dn) {
|
|
|
-// Boolean exists = (Boolean) executeReadOnly(new ContextExecutor() {
|
|
|
-// public Object executeWithContext(DirContext ctx) throws NamingException {
|
|
|
-// try {
|
|
|
-// Object obj = ctx.lookup(dn);
|
|
|
-// if (obj instanceof Context) {
|
|
|
-// LdapUtils.closeContext((Context) obj);
|
|
|
-// }
|
|
|
-//
|
|
|
-// } catch (NameNotFoundException nnfe) {
|
|
|
-// return Boolean.FALSE;
|
|
|
-// }
|
|
|
-//
|
|
|
-// return Boolean.TRUE;
|
|
|
-// }
|
|
|
-// });
|
|
|
-//
|
|
|
-// return exists.booleanValue();
|
|
|
-// }
|
|
|
-
|
|
|
/**
|
|
|
* Composes an object from the attributes of the given DN.
|
|
|
*
|
|
@@ -165,40 +138,18 @@ public class SpringSecurityLdapTemplate extends org.springframework.ldap.core.Ld
|
|
|
|
|
|
String formattedFilter = MessageFormat.format(filter, params);
|
|
|
|
|
|
- // Returns either a string or list of strings from each match, depending on whether the
|
|
|
- // specified attribute has one or more values.
|
|
|
- AttributesMapper roleMapper = new AttributesMapper() {
|
|
|
- public Object mapFromAttributes(Attributes attributes) throws NamingException {
|
|
|
- Attribute attribute = attributes.get(attributeName);
|
|
|
+ final HashSet set = new HashSet();
|
|
|
|
|
|
- if (attribute == null || attribute.size() == 0) {
|
|
|
+ ContextMapper roleMapper = new ContextMapper() {
|
|
|
+ public Object mapFromContext(Object ctx) {
|
|
|
+ DirContextAdapter adapter = (DirContextAdapter) ctx;
|
|
|
+ String[] values = adapter.getStringAttributes(attributeName);
|
|
|
+ if (values == null || values.length == 0) {
|
|
|
logger.debug("No attribute value found for '" + attributeName + "'");
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- if (attribute.size() == 1) {
|
|
|
- return attribute.get();
|
|
|
- }
|
|
|
-
|
|
|
- NamingEnumeration ne = attribute.getAll();
|
|
|
- List values = new ArrayList(attribute.size());
|
|
|
- while (ne.hasMore()) {
|
|
|
- values.add(ne.next());
|
|
|
- }
|
|
|
- return values;
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- AttributesMapperCallbackHandler collector = new AttributesMapperCallbackHandler(roleMapper) {
|
|
|
- public void handleNameClassPair(NameClassPair nameClassPair) {
|
|
|
- Object roleObject = getObjectFromNameClassPair(nameClassPair);
|
|
|
-
|
|
|
- if (roleObject instanceof String) {
|
|
|
- getList().add(roleObject);
|
|
|
- } else if (roleObject instanceof List) {
|
|
|
- getList().addAll((List)roleObject);
|
|
|
+ } else {
|
|
|
+ set.addAll(Arrays.asList(values));
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -207,9 +158,9 @@ public class SpringSecurityLdapTemplate extends org.springframework.ldap.core.Ld
|
|
|
ctls.setReturningAttributes(new String[] {attributeName});
|
|
|
ctls.setReturningObjFlag(false);
|
|
|
|
|
|
- search(base, formattedFilter, ctls, collector);
|
|
|
+ search(base, formattedFilter, ctls, roleMapper);
|
|
|
|
|
|
- return new HashSet(collector.getList());
|
|
|
+ return set;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -252,13 +203,6 @@ public class SpringSecurityLdapTemplate extends org.springframework.ldap.core.Ld
|
|
|
dn.append(base);
|
|
|
}
|
|
|
|
|
|
-// String nameInNamespace = ctx.getNameInNamespace();
|
|
|
-//
|
|
|
-// if (StringUtils.hasLength(nameInNamespace)) {
|
|
|
-// dn.append(",");
|
|
|
-// dn.append(nameInNamespace);
|
|
|
-// }
|
|
|
-
|
|
|
return new DirContextAdapter(searchResult.getAttributes(), new DistinguishedName(dn.toString()));
|
|
|
}
|
|
|
});
|