【问题标题】: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...

【问题讨论】:

    标签: spring spring-security


    【解决方案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/… 然后你不必自定义任何东西,默认实现开箱即用。
    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2021-05-14
    • 2014-04-02
    • 2019-03-23
    相关资源
    最近更新 更多