Предварительная аутентификация Spring Security Проверка блокировки учетной записи

Вопрос новичка... Я успешно внедрил пользовательские обработчики и службу (Служба пользовательских данных, Успешная проверка подлинности, Ошибка проверки подлинности) и все работает нормально. Теперь я также реализовал функциональность, которая блокирует учетную запись (на определенное время), если они не проходят проверку подлинности 3 раза.

Сейчас я перехожу к обработке сценария, когда пользователь пытается аутентифицироваться, когда у него есть блокировка учетной записи. Если блокировка активна>, аутентификация не должна предприниматься, и пользователь перенаправляется на страницу заблокированной учетной записи / ошибка. Если блокировка истекла> блокировка должна быть удалена, и аутентификация продолжается как обычно

В случае, когда активна блокировка учетной записи - я пытался реализовать это в моем обработчике успеха пользовательской аутентификации, но, несмотря на успешную пересылку пользователя на страницу ошибки блокировки учетной записи - уже слишком поздно, поскольку приложение уже аутентифицировало пользователя, и пользователь успешно иметь доступ к защищенным страницам напрямую (что, очевидно, неправильно, поскольку их учетная запись должна быть заблокирована).

Я начал играть, но я решил сначала проверить здесь более стандартное / элегантное решение / подход. Должен ли я выполнять эту проверку и действия в службе пользовательских сведений о пользователе или есть обработчик предварительной проверки подлинности, который я мог бы реализовать до того, как пользователь даже нажмет на службу пользовательских сведений о пользователе? Буду очень признателен за любую помощь или совет о том, где / как я могу справиться с этим.

3 ответа

В ваших реализациях UserDetails передайте true следующим значениям

  1. isAccountNonExpired ()
  2. isAccountNonLocked ()
  3. 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.

Другие вопросы по тегам