2

我正在使用弹簧安全 3.1.3。在我正在构建的应用程序上,当用户尝试登录时,除了检查他们的用户名和密码外,我还需要进行额外检查以验证他们的帐户(特别是,他们的帐户没有设置表明他们是禁止登录)。我对解决此问题的最佳方法感到困惑。

我应该创建一个身份验证过滤器 bean 并将其包含在我的 spring xml 的 form-login 元素中吗?或者我应该使用仅在用户成功满足用户名/密码要求时运行的身份验证成功过滤器来做某事?或者是其他东西?

4

1 回答 1

4

定义实现UserDetailsS​​ervice的自定义用户详细信息服务。使用用户凭据填充类User的实例,您可以使用该字段enabledaccountNonLocked用于被禁止的用户。

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {

    @Transactional(readOnly = true)
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {   

       // load user data from repository
       String password = ...
       boolean enabled = ...
       // ...
       UserDetails user = new User(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
       return user;     
    }   
}

然后将您的服务连接到身份验证管理器中spring-security.xml

<security:authentication-manager>   
    <security:authentication-provider user-service-ref="userDetailsService">
    ...
<security:authentication-manager>  
于 2013-07-03T20:36:07.520 回答