Spring Security: вместо BadCredentialsException выбрасывается LockedException, почему?
Использование Spring Security 4.0.2.RELEASE
Для базовой аутентификации пользователей с использованием Spring-Security Framework я реализовал Spring-SecurityDaoAuthenticationProvider
Когда пользователь пытается войти с правильным именем пользователя,некорректный пароль и пользовательаккаунт уже заблокирован, тогда я ожидал, что модуль аутентификации Spring-Security будет бросатьBadCredentialsException
Но вместо этого он бросаетLockedException
Мои вопросы
Почему Spring-Security обрабатывает пользователя для дальнейшей аутентификации, в то время как учетные данные, особенно пароль, неверны?Рекомендуется ли показывать в приложении сообщение «Пользователь заблокирован», даже если пароль пользователя недействителен?Как мне удается генерировать / ловитьBadCredentialsException
за неверный пароль и заблокированного пользователя?Любая помощь будет оценена. Код реализации провайдера аутентификации
@Component("authenticationProvider")
public class LoginAuthenticationProvider extends DaoAuthenticationProvider {
@Autowired
UserDAO userDAO;
@Autowired
@Qualifier("userDetailsService")
@Override
public void setUserDetailsService(UserDetailsService userDetailsService) {
super.setUserDetailsService(userDetailsService);
}
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
try {
Authentication auth = super.authenticate(authentication);
// if reach here, means login success, else exception will be thrown
// reset the user attempts
userDAO.resetPasswordRetryAttempts(authentication.getName());
return auth;
} catch (BadCredentialsException ex) {
// invalid login, update user attempts
userDAO.updatePasswordRetryAttempts(authentication.getName(), PropertyUtils.getLoginAttemptsLimit());
throw ex;
} catch (LockedException ex) {
// this user is locked
throw ex;
} catch (AccountExpiredException ex) {
// this user is expired
throw ex;
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
}