@ -3,19 +3,18 @@
@@ -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 {
@@ -32,38 +31,38 @@ public class NtlmAwareLdapAuthenticator extends BindAuthenticator {
//~ Constructors ===================================================================================================
public NtlmAwareLdapAuthenticator ( SpringSecurity ContextSource contextSource ) {
super ( contextSource ) ;
}
public NtlmAwareLdapAuthenticator ( BaseLdapPath ContextSource 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 < tt > Authentication < / tt > object is of type < tt > NtlmUsernamePasswordAuthenticationToken < / tt > ,
* /
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 < tt > Authentication < / tt > object is of type < tt > NtlmUsernamePasswordAuthenticationToken < / tt > ,
* 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 {
@@ -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 ;
}
}