Как проверить, что BadCredentialsException не выбрасывается в loadUserByUsername - PullRequest
1 голос
/ 28 февраля 2012

Я аутентифицирую своих пользователей с помощью UserDetailsService:

<authentication-manager alias="authenticationManager">          
      <authentication-provider user-service-ref="userDetailsService">
         <password-encoder hash="sha"/>             
      </authentication-provider>   
    </authentication-manager> 

userDetailsService класс:

@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserService userService;


    @Override
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException, DataAccessException {

User user = null;
    try {
        user = userService.getUserByUsername(username);
    } catch (Exception e) {
        e.printStackTrace();
    }


   if (user.isForceChangePass()) {
        MyForcePasswordChangeException bad = new MyForcePasswordChangeException(
                "Password is not valid, and it must be changed!");
        throw bad;
    }

}

РЕДАКТИРОВАТЬ:

после получения имени пользователя iпроверить индикатор ForceChangePass и, если это правда, я через свое собственное исключение, которое, в свою очередь, приводит пользователя к loginFailureHandler (несмотря на то, что пароль правильный или нет), я хочу в loginFailureHandler проверить, выбрасывается ли мое исключение только в случае успешного входа в систему.

1 Ответ

2 голосов
/ 28 февраля 2012

loadUserByUsername() не должен проверять учетные данные, он должен загружать только UserDetails объект (имеющий метод getPassword()) или выбрасывать UsernameNotFoundException.

Если вы хотите проверить, успешно ли прошла аутентификация пользователя, посмотрите Прослушивание успешного входа в систему с помощью Spring Security :

<form-login 
  authentication-success-handler-ref="authenticationSuccessHandler"
  authentication-failure-url="authenticationFailureHandler"/>

Вы должны реализовать AuthenticationSuccessHandler и AuthenticationFailureHandler.

В качестве альтернативы рассмотрите подклассы BasicAuthenticationFilter и переопределите onSuccessfulAuthentication() и onUnsuccessfulAuthentication().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...