来自CAS的用户名和来自其他数据库的角色

时间:2013-11-07 12:51:45

标签: java spring spring-security cas jasig

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

我们使用带有CAS的MySQL数据库来验证用户,然后我们在成功后传递属性,我们从名为“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和Implements UserDetails,然后我使用UserDetailsService加载我的自定义类。

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

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

这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

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

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