我正在使用spring security 3.1.3。在我正在构建的应用程序上,当用户尝试登录时,除了检查其用户名和密码之外,我还需要进行额外的检查以验证其帐户(具体而言,他们的帐户没有设置标志,表明他们是禁止登录)。我很担心最好的办法。
我应该创建一个身份验证过滤器bean并将其包含在我的spring xml中的form-login元素中吗?或者我应该使用仅在用户成功用户名/密码要求时运行的身份验证成功过滤器?或其他什么?
答案 0 :(得分:4)
定义实施UserDetailsService的自定义用户详细信息服务。使用用户凭据填充班级User的实例,您可以对被禁用户使用字段enabled
或accountNonLocked
。
@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>