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

Posted

技术标签:

【中文标题】如何创建具有多个状态的身份验证管理器【英文标题】:how to create authentication-manager with multiple states 【发布时间】:2013-01-27 12:11:42 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

使用 if 进行查询(假设:userstatus 0 被禁用,另一个被启用):

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

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

【讨论】:

还需要获取该用户状态值【参考方案2】:

您的用户状态字段中的值代表什么?它不仅仅是一个二进制启用/禁用标志,但不清楚它的确切含义。

检查您是否可以将这些值映射到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 的其他组件将确保用户只有在启用、未锁定等情况下才能获得身份验证。

【讨论】:

0 - 非活动,1- 活动,2- 组之一 在同一个字段中混合帐户状态和组成员信息不是最好的主意。根据 Spring Security 文档中指定的用户模式创建用户数据库可能会更好:static.springsource.org/spring-security/site/docs/3.1.x/… 然后你不必自定义任何东西,默认实现开箱即用。

以上是关于如何创建具有多个状态的身份验证管理器的主要内容,如果未能解决你的问题,请参考以下文章

如何根据授权服务器的传入 URL 配置多个身份验证管理器?

具有 Spring Security 和 Java 配置的自定义身份验证管理器

具有多个角色的 Laravel 身份验证

Symfony2:如何使用非默认实体管理器对用户进行身份验证?

如何使用 Windows 身份验证并注册自定义身份验证管理器

.NET Core - 使用具有专用身份验证 API 的多个身份验证方案 [关闭]