Предварительная аутентификация Spring Security Проверка блокировки учетной записи
Вопрос новичка... Я успешно внедрил пользовательские обработчики и службу (Служба пользовательских данных, Успешная проверка подлинности, Ошибка проверки подлинности) и все работает нормально. Теперь я также реализовал функциональность, которая блокирует учетную запись (на определенное время), если они не проходят проверку подлинности 3 раза.
Сейчас я перехожу к обработке сценария, когда пользователь пытается аутентифицироваться, когда у него есть блокировка учетной записи. Если блокировка активна>, аутентификация не должна предприниматься, и пользователь перенаправляется на страницу заблокированной учетной записи / ошибка. Если блокировка истекла> блокировка должна быть удалена, и аутентификация продолжается как обычно
В случае, когда активна блокировка учетной записи - я пытался реализовать это в моем обработчике успеха пользовательской аутентификации, но, несмотря на успешную пересылку пользователя на страницу ошибки блокировки учетной записи - уже слишком поздно, поскольку приложение уже аутентифицировало пользователя, и пользователь успешно иметь доступ к защищенным страницам напрямую (что, очевидно, неправильно, поскольку их учетная запись должна быть заблокирована).
Я начал играть, но я решил сначала проверить здесь более стандартное / элегантное решение / подход. Должен ли я выполнять эту проверку и действия в службе пользовательских сведений о пользователе или есть обработчик предварительной проверки подлинности, который я мог бы реализовать до того, как пользователь даже нажмет на службу пользовательских сведений о пользователе? Буду очень признателен за любую помощь или совет о том, где / как я могу справиться с этим.
3 ответа
В ваших реализациях UserDetails передайте true следующим значениям
- isAccountNonExpired ()
- isAccountNonLocked ()
- isCredentialsNonExpired ()
Для получения дополнительной информации вы можете проверить публичную проверку void (пользователь UserDetails) в классе AbstractUserDetailsAuthenticationProvider. Надеюсь, это кому-нибудь поможет.
Используйте следующие четыре метода в качестве
true
в
UserDetails
класс реализации, чтобы предотвратить блокировку вашей тестовой учетной записи.
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
Есть встроенная LockedException. Он будет выдан AuthenticationManager, если UserDetails.isAccountNonLocked() == false. Таким образом, вы можете выполнить проверку в методе UserDetailsService.loadUserByUsername(...). Просто передайте ложное значение для параметра accountNonExpired при создании нового объекта User.