Spring security Spring安全预验证帐户锁检查

Spring security Spring安全预验证帐户锁检查,spring-security,pre-authentication,Spring Security,Pre Authentication,新手问题。。。我已经成功地实现了自定义处理程序和服务(自定义用户详细信息服务、身份验证成功、身份验证失败),一切正常。我现在还实现了一个功能,如果认证失败3次,就会锁定一个帐户(在一定时间内) 现在,我将继续处理当用户拥有帐户锁时尝试进行身份验证的场景。如果锁定处于活动状态>,则不应尝试身份验证,并将用户重定向到锁定的帐户页面/错误。如果锁已过期>,则应移除锁并按正常方式进行身份验证 在帐户锁处于活动状态的情况下——我已尝试在自定义身份验证成功处理程序中实现这一点,但尽管成功地将用户转发到帐户锁

新手问题。。。我已经成功地实现了自定义处理程序和服务(自定义用户详细信息服务、身份验证成功、身份验证失败),一切正常。我现在还实现了一个功能,如果认证失败3次,就会锁定一个帐户(在一定时间内)

现在,我将继续处理当用户拥有帐户锁时尝试进行身份验证的场景。如果锁定处于活动状态>,则不应尝试身份验证,并将用户重定向到锁定的帐户页面/错误。如果锁已过期>,则应移除锁并按正常方式进行身份验证

在帐户锁处于活动状态的情况下——我已尝试在自定义身份验证成功处理程序中实现这一点,但尽管成功地将用户转发到帐户锁错误页面——但为时已晚,因为应用程序已经对用户进行了身份验证,并且用户能够成功地直接访问安全页面(这显然是错误的,因为他们的帐户应该被锁定)


我开始玩了,但我想我应该先在这里查看一个更标准/优雅的解决方案/方法。我应该在自定义用户详细信息服务中执行此检查和操作,还是在用户点击自定义用户详细信息服务之前,有一个预验证处理程序可以实现?关于我在哪里/如何合作,有什么帮助或建议吗uld处理此问题将非常感谢

有内置的LockedException。如果UserDetails.isAccountNonLocked()==false,则AuthenticationManager将抛出该异常。因此,您可以在UserDetails服务中执行签入。loadUserByUsername(…)方法。创建新用户对象时,只需将AccountNoneExpired参数的值传递为false。

在UserDetails实现中,将true传递给以下值

  • IsAccountNoExpired()
  • isAccountNonLocked()
  • isCredentialsNonExpired()

  • 有关更多详细信息,您可以查看公共作废检查(UserDetails用户)AbstractUserDetailsAuthenticationProvider类中。希望这对某人有所帮助。

    UserDetails
    实现类中使用以下四种方法作为
    true
    ,以防止锁定您的测试帐户

    @覆盖
    公共布尔值IsAccountNoExpired(){
    返回true;
    }
    @凌驾
    公共布尔值isAccountNonLocked(){
    返回true;
    }
    @凌驾
    公共布尔值isCredentialsNonExpired(){
    返回true;
    }
    @凌驾
    公共布尔值isEnabled(){
    返回true;
    }