diff --git a/ntlm/src/main/java/org/springframework/security/ui/ntlm/ldap/authenticator/NtlmAwareLdapAuthenticator.java b/ntlm/src/main/java/org/springframework/security/ui/ntlm/ldap/authenticator/NtlmAwareLdapAuthenticator.java index affb43d54a..da5067a09f 100755 --- a/ntlm/src/main/java/org/springframework/security/ui/ntlm/ldap/authenticator/NtlmAwareLdapAuthenticator.java +++ b/ntlm/src/main/java/org/springframework/security/ui/ntlm/ldap/authenticator/NtlmAwareLdapAuthenticator.java @@ -3,19 +3,18 @@ */ package org.springframework.security.ui.ntlm.ldap.authenticator; +import java.util.Iterator; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ldap.NameNotFoundException; +import org.springframework.ldap.core.DirContextOperations; +import org.springframework.ldap.core.support.BaseLdapPathContextSource; import org.springframework.security.Authentication; import org.springframework.security.BadCredentialsException; -import org.springframework.security.ldap.SpringSecurityContextSource; import org.springframework.security.ldap.SpringSecurityLdapTemplate; import org.springframework.security.providers.ldap.authenticator.BindAuthenticator; import org.springframework.security.ui.ntlm.NtlmUsernamePasswordAuthenticationToken; -import org.springframework.ldap.NameNotFoundException; -import org.springframework.ldap.core.DirContextOperations; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Iterator; /** * Loads the UserDetails if authentication was already performed by NTLM (indicated by the type of authentication @@ -32,38 +31,38 @@ public class NtlmAwareLdapAuthenticator extends BindAuthenticator { //~ Constructors =================================================================================================== - public NtlmAwareLdapAuthenticator(SpringSecurityContextSource contextSource) { - super(contextSource); - } + public NtlmAwareLdapAuthenticator(BaseLdapPathContextSource contextSource) { + super(contextSource); + } //~ Methods ======================================================================================================== /** * Loads the user context information without binding. - */ - protected DirContextOperations loadUser(String aUserDn, String aUserName) { - SpringSecurityLdapTemplate template = new SpringSecurityLdapTemplate(getContextSource()); - - try { - DirContextOperations user = template.retrieveEntry(aUserDn, getUserAttributes()); - - return user; - } catch (NameNotFoundException e) { - // 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. - if (logger.isDebugEnabled()) { - logger.debug("Failed to load user " + aUserDn + ": " + e.getMessage(), e); - } - } - return null; - } - - /** - * If the supplied Authentication object is of type NtlmUsernamePasswordAuthenticationToken, + */ + protected DirContextOperations loadUser(String aUserDn, String aUserName) { + SpringSecurityLdapTemplate template = new SpringSecurityLdapTemplate(getContextSource()); + + try { + DirContextOperations user = template.retrieveEntry(aUserDn, getUserAttributes()); + + return user; + } catch (NameNotFoundException e) { + // 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. + if (logger.isDebugEnabled()) { + logger.debug("Failed to load user " + aUserDn + ": " + e.getMessage(), e); + } + } + return null; + } + + /** + * If the supplied Authentication object is of type NtlmUsernamePasswordAuthenticationToken, * the information stored in the user's directory entry is loaded without attempting to authenticate them. * Otherwise the parent class is called to perform a bind operation to authenticate the user. - */ - public DirContextOperations authenticate(Authentication authentication) { + */ + public DirContextOperations authenticate(Authentication authentication) { if (!(authentication instanceof NtlmUsernamePasswordAuthenticationToken)) { // Not NTLM authenticated, so call the base class to authenticate the user. return super.authenticate(authentication); @@ -74,36 +73,36 @@ public class NtlmAwareLdapAuthenticator extends BindAuthenticator { } if (logger.isDebugEnabled()) { - logger.debug("authenticate(NtlmUsernamePasswordAuthenticationToken) - start"); //$NON-NLS-1$ - } - - final String userName = authentication.getName(); - DirContextOperations user = null; - - // If DN patterns are configured, try authenticating with them directly - Iterator myDns = getUserDns(userName).iterator(); - - // tries them all until we found something - while (myDns.hasNext() && (user == null)) { - user = loadUser((String) myDns.next(), userName); - } - - // Otherwise use the configured locator to find the user - // and authenticate with the returned DN. - if ((user == null) && (getUserSearch() != null)) { - DirContextOperations userFromSearch = getUserSearch().searchForUser(userName); - // lancer l'identificvation - user = loadUser(userFromSearch.getDn().toString(), userName); - } - - // Failed to locate the user in the LDAP directory - if (user == null) { - throw new BadCredentialsException(messages.getMessage("BindAuthenticator.badCredentials", "Bad credentials")); - } - - if (logger.isDebugEnabled()) { - logger.debug("authenticate(NtlmUsernamePasswordAuthenticationToken) - end"); //$NON-NLS-1$ - } - return user; - } + logger.debug("authenticate(NtlmUsernamePasswordAuthenticationToken) - start"); //$NON-NLS-1$ + } + + final String userName = authentication.getName(); + DirContextOperations user = null; + + // If DN patterns are configured, try authenticating with them directly + Iterator myDns = getUserDns(userName).iterator(); + + // tries them all until we found something + while (myDns.hasNext() && (user == null)) { + user = loadUser((String) myDns.next(), userName); + } + + // Otherwise use the configured locator to find the user + // and authenticate with the returned DN. + if ((user == null) && (getUserSearch() != null)) { + DirContextOperations userFromSearch = getUserSearch().searchForUser(userName); + // lancer l'identificvation + user = loadUser(userFromSearch.getDn().toString(), userName); + } + + // Failed to locate the user in the LDAP directory + if (user == null) { + throw new BadCredentialsException(messages.getMessage("BindAuthenticator.badCredentials", "Bad credentials")); + } + + if (logger.isDebugEnabled()) { + logger.debug("authenticate(NtlmUsernamePasswordAuthenticationToken) - end"); //$NON-NLS-1$ + } + return user; + } }