如何创建具有多个状态的身份验证管理器

时间:2013-02-12 08:22:51

标签: spring spring-security

如何使用数据库创建身份验证管理器?

users-by-username-query ="选择AS用户名,b AS密码,启用userstatus AS。 此userstatus有多个值.0,1,2,3 ...

2 个答案:

答案 0 :(得分:1)

对查询使用if(假设:禁用userstatus 0而启用另一个):

SELECT a AS username, b AS password, if(userstatus=0,0,1) AS enabled

你可以在里面添加另一个if语句。

答案 1 :(得分:0)

您的userstatus文件中的值代表什么?它不仅仅是二进制启用/禁用标志,但还不清楚它究竟意味着什么。

检查您是否可以将这些值映射到UserDetails界面的属性(已启用,帐户已过期,帐户已锁定,凭据已过期)。如果是这样,您只需覆盖子类中的JdbcDaoImpl.loadUsersByUsername(),以便根据数据库中提交的User创建userstatus对象。然后将此自定义子类配置为UserDetailsService

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService'/>
</authentication-manager>

<beans:bean id="myUserDetailsService" class="YourCustomJdbcDaoImpl">
    <beans:property name="dataSource" ref="dataSource"/>
</beans:bean>

然后,Spring Security的其他组件将确保用户只有在启用,未锁定等情况下才能进行身份验证。