Removed unused autodetect method and reformatted code.

This commit is contained in:
Luke Taylor 2007-10-18 16:50:31 +00:00
parent bd740a91a2
commit 380b22f50d

View File

@ -15,8 +15,6 @@
package org.springframework.security.providers.dao; package org.springframework.security.providers.dao;
import java.util.Map;
import org.springframework.security.AuthenticationException; import org.springframework.security.AuthenticationException;
import org.springframework.security.AuthenticationServiceException; import org.springframework.security.AuthenticationServiceException;
import org.springframework.security.BadCredentialsException; import org.springframework.security.BadCredentialsException;
@ -26,7 +24,6 @@ import org.springframework.security.providers.encoding.PasswordEncoder;
import org.springframework.security.providers.encoding.PlaintextPasswordEncoder; import org.springframework.security.providers.encoding.PlaintextPasswordEncoder;
import org.springframework.security.userdetails.UserDetails; import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService; import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.context.ApplicationContext;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -36,141 +33,111 @@ import org.springframework.util.Assert;
* *
* @author Ben Alex * @author Ben Alex
* @version $Id: DaoAuthenticationProvider.java 1857 2007-05-24 00:47:12Z * @version $Id: DaoAuthenticationProvider.java 1857 2007-05-24 00:47:12Z
* benalex $ * benalex $
*/ */
public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
// ~ Instance fields //~ Instance fields ================================================================================================
// ================================================================================================
private PasswordEncoder passwordEncoder = new PlaintextPasswordEncoder(); private PasswordEncoder passwordEncoder = new PlaintextPasswordEncoder();
private SaltSource saltSource; private SaltSource saltSource;
private UserDetailsService userDetailsService; private UserDetailsService userDetailsService;
private boolean includeDetailsObject = true; private boolean includeDetailsObject = true;
// ~ Methods //~ Methods ========================================================================================================
// ========================================================================================================
protected void additionalAuthenticationChecks(UserDetails userDetails, protected void additionalAuthenticationChecks(UserDetails userDetails,
UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
Object salt = null; Object salt = null;
if (this.saltSource != null) { if (this.saltSource != null) {
salt = this.saltSource.getSalt(userDetails); salt = this.saltSource.getSalt(userDetails);
} }
if (authentication.getCredentials() == null) { if (authentication.getCredentials() == null) {
throw new BadCredentialsException(messages.getMessage( throw new BadCredentialsException(messages.getMessage(
"AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"), "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),
includeDetailsObject ? userDetails : null); includeDetailsObject ? userDetails : null);
} }
String presentedPassword = authentication.getCredentials() == null ? "" : authentication.getCredentials() String presentedPassword = authentication.getCredentials() == null ? "" : authentication.getCredentials()
.toString(); .toString();
if (!passwordEncoder.isPasswordValid(userDetails.getPassword(), presentedPassword, salt)) { if (!passwordEncoder.isPasswordValid(userDetails.getPassword(), presentedPassword, salt)) {
throw new BadCredentialsException(messages.getMessage( throw new BadCredentialsException(messages.getMessage(
"AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"), "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),
includeDetailsObject ? userDetails : null); includeDetailsObject ? userDetails : null);
} }
} }
protected void doAfterPropertiesSet() throws Exception { protected void doAfterPropertiesSet() throws Exception {
Assert.notNull(this.userDetailsService, "A UserDetailsService must be set"); Assert.notNull(this.userDetailsService, "A UserDetailsService must be set");
} }
/** public PasswordEncoder getPasswordEncoder() {
* Introspects the <code>Applicationcontext</code> for the single instance return passwordEncoder;
* of {@link AccessDeniedHandler}. If found invoke }
* setAccessDeniedHandler(AccessDeniedHandler accessDeniedHandler) method by
* providing the found instance of accessDeniedHandler as a method
* parameter. If more than one instance of <code>AccessDeniedHandler</code>
* is found, the method throws <code>IllegalStateException</code>.
*
* @param applicationContext to locate the instance
*/
private void autoDetectAnyUserDetailsServiceAndUseIt(ApplicationContext applicationContext) {
if (applicationContext != null) {
Map map = applicationContext.getBeansOfType(UserDetailsService.class);
if (map.size() > 1) { public SaltSource getSaltSource() {
throw new IllegalArgumentException( return saltSource;
"More than one UserDetailsService beans detected please refer to the one using " }
+ " [ principalRepositoryBeanRef ] " + "attribute");
}
else if (map.size() == 1) {
setUserDetailsService((UserDetailsService) map.values().iterator().next());
}
}
}
public PasswordEncoder getPasswordEncoder() { public UserDetailsService getUserDetailsService() {
return passwordEncoder; return userDetailsService;
} }
public SaltSource getSaltSource() { protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
return saltSource; throws AuthenticationException {
} UserDetails loadedUser;
public UserDetailsService getUserDetailsService() { try {
return userDetailsService; loadedUser = this.getUserDetailsService().loadUserByUsername(username);
} }
catch (DataAccessException repositoryProblem) {
throw new AuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem);
}
protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) if (loadedUser == null) {
throws AuthenticationException { throw new AuthenticationServiceException(
UserDetails loadedUser; "UserDetailsService returned null, which is an interface contract violation");
}
return loadedUser;
}
try { /**
loadedUser = this.getUserDetailsService().loadUserByUsername(username); * Sets the PasswordEncoder instance to be used to encode and validate passwords.
} * If not set, {@link PlaintextPasswordEncoder} will be used by default.
catch (DataAccessException repositoryProblem) { *
throw new AuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem); * @param passwordEncoder The passwordEncoder to use
} */
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
if (loadedUser == null) { /**
throw new AuthenticationServiceException( * The source of salts to use when decoding passwords. <code>null</code>
"UserDetailsService returned null, which is an interface contract violation"); * is a valid value, meaning the <code>DaoAuthenticationProvider</code>
} * will present <code>null</code> to the relevant <code>PasswordEncoder</code>.
return loadedUser; *
} * @param saltSource to use when attempting to decode passwords via the <code>PasswordEncoder</code>
*/
public void setSaltSource(SaltSource saltSource) {
this.saltSource = saltSource;
}
/** public void setUserDetailsService(UserDetailsService userDetailsService) {
* Sets the PasswordEncoder instance to be used to encode and validate this.userDetailsService = userDetailsService;
* passwords. If not set, {@link PlaintextPasswordEncoder} will be used by }
* default.
*
* @param passwordEncoder The passwordEncoder to use
*/
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
/** public boolean isIncludeDetailsObject() {
* The source of salts to use when decoding passwords. <code>null</code> return includeDetailsObject;
* is a valid value, meaning the <code>DaoAuthenticationProvider</code> }
* will present <code>null</code> to the relevant
* <code>PasswordEncoder</code>.
*
* @param saltSource to use when attempting to decode passwords via the
* <code>PasswordEncoder</code>
*/
public void setSaltSource(SaltSource saltSource) {
this.saltSource = saltSource;
}
public void setUserDetailsService(UserDetailsService userDetailsService) { public void setIncludeDetailsObject(boolean includeDetailsObject) {
this.userDetailsService = userDetailsService; this.includeDetailsObject = includeDetailsObject;
}
public boolean isIncludeDetailsObject() {
return includeDetailsObject;
}
public void setIncludeDetailsObject(boolean includeDetailsObject) {
this.includeDetailsObject = includeDetailsObject;
} }
} }