java - 强制 Spring 安全性在帐户状态标志之前检查凭据

标签 java spring-security

我将 org.springframework.security.core.userdetails.User 子类化,并在我的构造函数中调用:

Super (String username,
        String password,
        boolean enabled,
        boolean accountNonExpired,
        boolean credentialsNonExpired,
        boolean accountNonLocked,
        GrantedAuthority[] authorities)

然后我使用 ${SPRING_SECURITY_LAST_EXCEPTION.message} 在登录失败时显示结果。

我遇到的问题是,如果我将 accountNotLocked 设置为 false,则会显示帐户锁定错误消息,并且无论密码是否正确都会发生这种情况。如果 spring 首先验证凭据然后启用 accountNonExpired、credentialsNonExpired 和 accountNonLocked 标志,我会更喜欢它。这样,用户只有在获得正确的凭据后才会收到他们的帐户被锁定的通知。

有没有办法强制 spring 这样做?

最佳答案

我假设您使用的是最流行的 DaoAuthenticationProvider问题出在 UserDetailsChecker此类中的默认实现。也就是说,在 DaoAuthenticationProvider.additionalAuthenticationChecks 之后移动所有检查应该足以解决您的问题。尝试以下配置:

<authentication-manager alias="authenticationManager">
  <authentication-provider ref="daoAuthenticationProvider" />
</authentication-manager>

<bean id="daoAuthenticationProvider"
      class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
  <property name="userDetailsService" ref="userDetailsService"/>
  <property name="passwordEncoder" ref="passwordEncoder"/>
  <property name="preAuthenticationChecks"
      class="com.example.NullUserDetailsChecker"/>
  <property name="postAuthenticationChecks"
      class="org.springframework.security.authentication.AccountStatusUserDetailsChecker"/>
</bean>

其中 com.example.NullUserDetailsCheckernull object pattern UserDetailsChecker 的实现(具有不执行任何操作的 void 检查方法)。

关于java - 强制 Spring 安全性在帐户状态标志之前检查凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973619/

相关文章:

java - 将 Spring Security AbstractAuthenticationProcessingFilter 迁移到 WebFlux

java - 网络逻辑 10.3 : EJB JAR is getting deployed as "Library" and not "EJB"

java - 编程以捕获数组中的输入

java - 如何在 Eclipse 中导入 jar?

java - Java程序可以与终端通信吗?

java - 使用 spring 3 security 对密码加盐

java - Keycloak:无法将 AnonymousAuthenticationToken 转换为 KeycloakAuthenticationToken

java - 将 Spring 安全与 JSF 2 集成

spring - 自定义Spring 3.0安全过滤器,多个EntryPoints,AuthenticationProvider

java - 递归函数在数组中添加元素