2013-07-03 125 views
2

我使用弹簧安全性3.1.3。在我创建的应用中,当用户尝试登录时,除了检查用户名和密码外,我还需要进行额外的检查以验证其帐户(具体而言,他们的帐户没有设置标志,表示他们是禁止登录)。我很困惑这是最好的方式。弹簧安全性定制认证要求

我应该创建一个认证过滤器bean并将其包含在我的spring xml的form-login元素中吗?或者我应该做一些验证成功的过滤器,只有当用户成功的用户名/密码要求时才运行?或者是其他东西?

回答

4

定义一个自定义用户详细信息服务,实现UserDetailsService。使用用户凭证填充类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>