除非我误解了您的问题,否则您要的是正常使用模式 - CasAuthenticationProvider
配置有一个 UserDetailsService
从本地数据库而不是CAS加载角色。
如果您看一下 CAS样本应用程序配置, ,您只需替换 userService
BEAN带有您自己的实现,从您的应用程序特定数据库中加载了用户信息。
题
我有CAS 3 Spring 3.2,并使用MySQL数据库在Tomcat 7上运行的Spring Security 3.2。
我们将MySQL数据库与CAS一起验证用户,然后在成功后传递属性,我们从一个名为“ 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>
之后,我们要做的是从这些属性中获取用户名,然后转到一个名为“应用程序”的应用程序数据库。
因此,我们要做的是成功身份验证后从CAS中获取用户名,然后从数据库中获得其角色。
我们该如何正确执行?
更新
好的,现在我到目前为止尝试过的事情,我真的不知道这是有效的。
我已经实施了 UserDetailsService
我创造了一个 UserEntityDetails
这延伸了我的 UserEntity
和工具 UserDetails
, ,然后我用我的 UserDetailsService
加载我的自定义创建类。
然后在我的XML中我做了这个
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="casAuthProvider" user-service-ref="DBUserServiceDetails" />
</security:authentication-manager>
这是正确的方法吗?
解决方案
除非我误解了您的问题,否则您要的是正常使用模式 - CasAuthenticationProvider
配置有一个 UserDetailsService
从本地数据库而不是CAS加载角色。
如果您看一下 CAS样本应用程序配置, ,您只需替换 userService
BEAN带有您自己的实现,从您的应用程序特定数据库中加载了用户信息。