|
@@ -17,6 +17,7 @@ package org.acegisecurity.ldap;
|
|
|
|
|
|
import javax.naming.NamingException;
|
|
|
import javax.naming.NamingEnumeration;
|
|
|
+import javax.naming.NameNotFoundException;
|
|
|
import javax.naming.directory.DirContext;
|
|
|
import javax.naming.directory.SearchControls;
|
|
|
import javax.naming.directory.SearchResult;
|
|
@@ -44,7 +45,7 @@ public class LdapTemplate {
|
|
|
public static final String[] NO_ATTRS = new String[0];
|
|
|
|
|
|
private InitialDirContextFactory dirContextFactory;
|
|
|
- private String userDn = null;
|
|
|
+ private String managerDn = null;
|
|
|
private String password = null;
|
|
|
/** Default search scope */
|
|
|
private int searchScope = SearchControls.SUBTREE_SCOPE;
|
|
@@ -57,10 +58,10 @@ public class LdapTemplate {
|
|
|
public LdapTemplate(InitialDirContextFactory dirContextFactory, String userDn, String password) {
|
|
|
this(dirContextFactory);
|
|
|
|
|
|
- Assert.hasLength(userDn, "userDn must not be null or empty");
|
|
|
+ Assert.hasLength(userDn, "managerDn must not be null or empty");
|
|
|
Assert.notNull(password, "password cannot be null");
|
|
|
|
|
|
- this.userDn = userDn;
|
|
|
+ this.managerDn = userDn;
|
|
|
this.password = password;
|
|
|
}
|
|
|
|
|
@@ -72,9 +73,9 @@ public class LdapTemplate {
|
|
|
DirContext ctx = null;
|
|
|
|
|
|
try {
|
|
|
- ctx = (userDn == null) ?
|
|
|
+ ctx = (managerDn == null) ?
|
|
|
dirContextFactory.newInitialDirContext() :
|
|
|
- dirContextFactory.newInitialDirContext(userDn, password);
|
|
|
+ dirContextFactory.newInitialDirContext(managerDn, password);
|
|
|
|
|
|
return callback.execute(ctx);
|
|
|
|
|
@@ -162,4 +163,41 @@ public class LdapTemplate {
|
|
|
|
|
|
return (Set)execute(new SingleAttributeSearchCallback());
|
|
|
}
|
|
|
+
|
|
|
+ public boolean nameExists(final String dn) {
|
|
|
+
|
|
|
+ Boolean exists = (Boolean) execute( new LdapCallback() {
|
|
|
+
|
|
|
+ public Object execute(DirContext ctx) throws NamingException {
|
|
|
+ try {
|
|
|
+ ctx.lookup( LdapUtils.getRelativeName(dn, ctx) );
|
|
|
+ } catch(NameNotFoundException nnfe) {
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ return exists.booleanValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Composes an object from the attributes of the given DN.
|
|
|
+ *
|
|
|
+ * @param dn the directory entry which will be read
|
|
|
+ * @param mapper maps the attributes to the required object
|
|
|
+ * @param attributesToRetrieve the named attributes which will be retrieved from the directory entry.
|
|
|
+ * @return the object created by the mapper
|
|
|
+ */
|
|
|
+ public Object retrieveEntry(final String dn, final AttributesMapper mapper, final String[] attributesToRetrieve) {
|
|
|
+ return execute ( new LdapCallback() {
|
|
|
+
|
|
|
+ public Object execute(DirContext ctx) throws NamingException {
|
|
|
+ return mapper.mapAttributes( ctx.getAttributes(LdapUtils.getRelativeName(dn, ctx), attributesToRetrieve) );
|
|
|
+
|
|
|
+ }
|
|
|
+ } );
|
|
|
+ }
|
|
|
}
|