【发布时间】:2013-01-27 12:11:42
【问题描述】:
如何使用数据库创建身份验证管理器?
users-by-username-query="SELECT a AS 用户名,b AS 密码,userstatus AS 已启用。 此用户状态有多个值。0,1,2,3...
【问题讨论】:
如何使用数据库创建身份验证管理器?
users-by-username-query="SELECT a AS 用户名,b AS 密码,userstatus AS 已启用。 此用户状态有多个值。0,1,2,3...
【问题讨论】:
使用 if 进行查询(假设:userstatus 0 被禁用,另一个被启用):
SELECT a AS username, b AS password, if(userstatus=0,0,1) AS enabled
你可以在里面添加另一个 if 语句。
【讨论】:
您的用户状态字段中的值代表什么?它不仅仅是一个二进制启用/禁用标志,但不清楚它的确切含义。
检查您是否可以将这些值映射到UserDetails 接口的属性(已启用、帐户已过期、帐户已锁定、凭据已过期)。如果是这样,您只需在子类中覆盖JdbcDaoImpl.loadUsersByUsername(),以便它根据数据库中的userstatus 字段创建一个User 对象。然后将此自定义子类配置为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 的其他组件将确保用户只有在启用、未锁定等情况下才能获得身份验证。
【讨论】: