Я использую Spring 2.5.6 и Spring security 2.0.
Для попыток входа в систему я реализую класс UserDetails в своем классе User. Таким образом, класс User реализует isAccountNonLocked()
после неправильного входа в систему (отправка AuthenticationFailureBadCredentialsEvent
, я обрабатываю это с помощью Eventlistener
). Spring вызвал эту функцию из моего класса User, чтобы проверить, заблокирована ли учетная запись. Я реализую это следующим образом:
public boolean isAccountNonLocked() {
if (this.getFailedLoginAttempts() >= MAX_FAILED_LOGIN_ATTEMPTS) {
return false;
}
return this.accountNonLocked;
}
Это прекрасно работает с неверными учетными данными, но когда я заполнил правильные учетные данные, он никогда не вызывал эту функцию. Поэтому, если вы введете правильные учетные данные, он не проверит, заблокирован ли пользователь, поэтому он всегда входит в систему, даже если failedLoginAttempts
выше MAX_FAILED_LOGIN_ATTEMPTS
или если учетная запись заблокирована.
Я даже реализую AuthenticationSuccessEvent
, и если вы введете правильные учетные данные, он обрабатывает этот зарегистрированный обработчик событий (что-то делает, чтобы вернуть failLoginAttempts обратно в 0 после хорошего входа в систему)
Это баг в Spring 2.5.6? или это то, что я забыл ...