Added handleBindException method to allow subclasses to inspect the reason for bind failure.

This commit is contained in:
Luke Taylor 2006-08-25 16:06:20 +00:00
parent dc13f25dee
commit 57a8d2adb3
1 changed files with 14 additions and 8 deletions

View File

@ -26,6 +26,7 @@ import org.acegisecurity.userdetails.ldap.LdapUserDetailsImpl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import javax.naming.NamingException;
import java.util.Iterator; import java.util.Iterator;
@ -82,10 +83,6 @@ public class BindAuthenticator extends AbstractLdapAuthenticator {
private LdapUserDetails bindWithDn(String userDn, String username, String password) { private LdapUserDetails bindWithDn(String userDn, String username, String password) {
LdapTemplate template = new LdapTemplate(getInitialDirContextFactory(), userDn, password); LdapTemplate template = new LdapTemplate(getInitialDirContextFactory(), userDn, password);
if (logger.isDebugEnabled()) {
logger.debug("Attempting to bind with DN = " + userDn);
}
try { try {
LdapUserDetailsImpl.Essence user = (LdapUserDetailsImpl.Essence) template.retrieveEntry(userDn, LdapUserDetailsImpl.Essence user = (LdapUserDetailsImpl.Essence) template.retrieveEntry(userDn,
getUserDetailsMapper(), getUserAttributes()); getUserDetailsMapper(), getUserAttributes());
@ -94,12 +91,21 @@ public class BindAuthenticator extends AbstractLdapAuthenticator {
return user.createUserDetails(); return user.createUserDetails();
} catch (BadCredentialsException e) { } catch (BadCredentialsException e) {
// This will be thrown if an invalid user name is used and the method may // This will be thrown if an invalid user name is used and the method may
// be called multiple times to try different names, so we trap the exception. // be called multiple times to try different names, so we trap the exception
if (logger.isDebugEnabled()) { // unless a subclass wishes to implement more specialized behaviour.
logger.debug("Failed to bind as " + userDn + ": " + e.getCause()); handleBindException(userDn, username, e.getCause());
}
} }
return null; return null;
} }
/**
* Allows subclasses to inspect the exception thrown by an attempt to bind with a particular DN.
* The default implementation just reports the failure to the debug log.
*/
void handleBindException(String userDn, String username, Throwable cause) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to bind as " + userDn + ": " + cause);
}
}
} }