|  | @@ -35,6 +35,9 @@ import org.springframework.util.Assert;
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * An {@link AuthenticationProvider} implementation that retrieves user details
 | 
	
		
			
				|  |  |   * from an {@link UserDetailsService}.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @author Ben Alex
 | 
	
		
			
				|  |  | + * @version $Id$
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  public class DaoAuthenticationProvider
 | 
	
		
			
				|  |  |      extends AbstractUserDetailsAuthenticationProvider {
 | 
	
	
		
			
				|  | @@ -43,7 +46,6 @@ public class DaoAuthenticationProvider
 | 
	
		
			
				|  |  |      private UserDetailsService userDetailsService;
 | 
	
		
			
				|  |  |      private PasswordEncoder passwordEncoder = new PlaintextPasswordEncoder();
 | 
	
		
			
				|  |  |      private SaltSource saltSource;
 | 
	
		
			
				|  |  | -    private boolean hideUserNotFoundExceptions = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //~ Methods ================================================================
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -81,83 +83,51 @@ public class DaoAuthenticationProvider
 | 
	
		
			
				|  |  |          return saltSource;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public boolean isHideUserNotFoundExceptions() {
 | 
	
		
			
				|  |  | -        return hideUserNotFoundExceptions;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      protected final UserDetails retrieveUser(String username,
 | 
	
		
			
				|  |  | -        UsernamePasswordAuthenticationToken authentication)
 | 
	
		
			
				|  |  | +                                             UsernamePasswordAuthenticationToken authentication)
 | 
	
		
			
				|  |  |          throws AuthenticationException {
 | 
	
		
			
				|  |  |          UserDetails loadedUser;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              loadedUser = this.userDetailsService.loadUserByUsername(username);
 | 
	
		
			
				|  |  | -        } catch (UsernameNotFoundException notFound) {
 | 
	
		
			
				|  |  | -            if (hideUserNotFoundExceptions) {
 | 
	
		
			
				|  |  | -                throw new BadCredentialsException(messages.getMessage(
 | 
	
		
			
				|  |  | -                        "AbstractUserDetailsAuthenticationProvider.badCredentials",
 | 
	
		
			
				|  |  | -                        "Bad credentials"));
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                throw notFound;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  |          } catch (DataAccessException repositoryProblem) {
 | 
	
		
			
				|  |  | -            throw new AuthenticationServiceException(repositoryProblem
 | 
	
		
			
				|  |  | -                    .getMessage(), repositoryProblem);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            throw new AuthenticationServiceException(
 | 
	
		
			
				|  |  | +                    repositoryProblem.getMessage(), repositoryProblem );
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (loadedUser == null) {
 | 
	
		
			
				|  |  | -                throw new AuthenticationServiceException(
 | 
	
		
			
				|  |  | +        if (loadedUser == null) {
 | 
	
		
			
				|  |  | +            throw new AuthenticationServiceException(
 | 
	
		
			
				|  |  |                      "AuthenticationDao returned null, which is an interface contract violation");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            return loadedUser;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        public void setUserDetailsService(UserDetailsService authenticationDao) {
 | 
	
		
			
				|  |  | -            this.userDetailsService = authenticationDao;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        return loadedUser;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /**
 | 
	
		
			
				|  |  | -         * By default the <code>DaoAuthenticationProvider</code> throws a
 | 
	
		
			
				|  |  | -         * <code>BadCredentialsException</code> if a username is not found or
 | 
	
		
			
				|  |  | -         * the password is incorrect. Setting this property to
 | 
	
		
			
				|  |  | -         * <code>false</code> will cause
 | 
	
		
			
				|  |  | -         * <code>UsernameNotFoundException</code>s to be thrown instead for
 | 
	
		
			
				|  |  | -         * the former. Note this is considered less secure than throwing
 | 
	
		
			
				|  |  | -         * <code>BadCredentialsException</code> for both exceptions.
 | 
	
		
			
				|  |  | -         *
 | 
	
		
			
				|  |  | -         * @param hideUserNotFoundExceptions set to <code>false</code> if you
 | 
	
		
			
				|  |  | -         *        wish <code>UsernameNotFoundException</code>s to be thrown
 | 
	
		
			
				|  |  | -         *        instead of the non-specific
 | 
	
		
			
				|  |  | -         *        <code>BadCredentialsException</code> (defaults to
 | 
	
		
			
				|  |  | -         *        <code>true</code>)
 | 
	
		
			
				|  |  | -         */
 | 
	
		
			
				|  |  | -        public void setHideUserNotFoundExceptions(
 | 
	
		
			
				|  |  | -            boolean hideUserNotFoundExceptions) {
 | 
	
		
			
				|  |  | -            this.hideUserNotFoundExceptions = hideUserNotFoundExceptions;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +    public void setUserDetailsService(UserDetailsService authenticationDao) {
 | 
	
		
			
				|  |  | +        this.userDetailsService = authenticationDao;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /**
 | 
	
		
			
				|  |  | -         * Sets the PasswordEncoder instance to be used to encode and validate
 | 
	
		
			
				|  |  | -         * 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;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * Sets the PasswordEncoder instance to be used to encode and validate
 | 
	
		
			
				|  |  | +     * 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;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /**
 | 
	
		
			
				|  |  | -         * The source of salts to use when decoding passwords.
 | 
	
		
			
				|  |  | -         * <code>null</code> 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;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * The source of salts to use when decoding passwords.
 | 
	
		
			
				|  |  | +     * <code>null</code> 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;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +}
 |