【问题标题】:Username from CAS and Roles from another database来自 CAS 的用户名和来自另一个数据库的角色
【发布时间】:2013-11-19 03:07:36
【问题描述】:

我有 CAS 3 Spring 3.2 和 Spring Security 3.2 在带有 MySQL 数据库的 tomcat 7 上运行。

我们使用带有 CAS 的 MySQL 数据库来验证用户,然后我们在成功后传递属性,我们从名为 say"sso" 的数据库中获取这些详细信息

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">

    <constructor-arg index="0" ref="dataSource"/>
    <constructor-arg index="1" value="select * from user where {0}" />
    <property name="queryAttributeMapping">
        <map>
            <entry key="username" value="user_name" />
        </map>
    </property>

    <property name="resultAttributeMapping">
        <map>
            <entry key="user_name" value="username" />
            <entry key="full_name" value="fullname" />
        </map>
    </property>
</bean>

之后我们要做的是从这些属性中获取用户名,然后转到一个名为“app”的特定于应用程序的数据库。

所以我们要做的是在认证成功后从 CAS 中获取用户名,然后从数据库中获取其角色。

我们怎样才能正确地做到这一点?

更新

好吧,现在我已经尝试过,但我真的不知道这是否有效。

我已经实现了UserDetailsService,并创建了一个UserEntityDetails,它扩展了我的UserEntity 并实现了UserDetails,然后我使用我的UserDetailsService 来加载我自定义创建的类。

然后在我的 XML 中我做了这个

<security:authentication-manager alias="authenticationManager">
        <security:authentication-provider ref="casAuthProvider" user-service-ref="DBUserServiceDetails" />
    </security:authentication-manager>

这是正确的做法吗?

【问题讨论】:

    标签: java spring spring-security cas jasig


    【解决方案1】:

    除非我误解了您的问题,否则您要求的是正常使用模式 - CasAuthenticationProvider 配置有 UserDetailsService,它从本地数据库而不是 CAS 加载角色。

    如果您查看CAS sample application configuration,您只需将userService bean 替换为您自己的实现,该实现从您的应用程序特定的数据库中加载用户信息。

    【讨论】:

    • 好吧,那为什么这里有密码?密码不应该是 CAS 吗?
    • 它的存在只是因为这是 user-service 命名空间的语法,这里为了简单起见。 CasAuthentictaionProvider 不应该关心加载的 UserDetails 对象的密码属性。您可能想阅读this part of the manual。第 14 步是加载角色的地方。
    • 好的抱歉回复晚了,请查看我更新的问题
    • 你的 UserDetailsS​​ervice 应该被注入到 CasAuthenticationProvider 中。您不应该在 authentication-provider 元素中同时设置 ref 和 user-service-ref。同样,请参阅示例配置以供参考。除了 UserDetailsService 是一个单独的 bean 之外,它应该非常相似。
    猜你喜欢
    • 2015-11-25
    • 2021-11-27
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多