4

我正在尝试从 spring 安全应用程序连接到 cas 服务器。当我登录 CAS 时,请求被重定向到我的 webapp,但在我的 UserDetailsS​​ervice 中,我收到 _cas_stateful_ 作为用户名,我无法在 webapp 中找到我的用户来加载权限

4

1 回答 1

2

问题是 authenticationManager。正如文档所说,您必须像这样使用 CasAuthenticationProvider :

<beans:bean id="casAuthenticationProvider"
    class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    <beans:property name="authenticationUserDetailsService">
        <beans:bean
            class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
            <beans:constructor-arg ref="mongoUserDetailsService" />
        </beans:bean>
    </beans:property>
    <beans:property name="serviceProperties" ref="serviceProperties" />
    <beans:property name="ticketValidator">
        <beans:bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
            <beans:constructor-arg index="0" value="https://localhost:7443/cas" />
        </beans:bean>
    </beans:property>
    <!-- Esta clave es única por aplicación -->
    <beans:property name="key" value="your-provider-auth" />
</beans:bean>

然后你必须将 casAuthenticationProvider 设置为 authenticationManager:

<authentication-manager alias="authenticationManager">
    <!-- <authentication-provider user-service-ref='mongoUserDetailsService'/>  -->
    <authentication-provider ref="casAuthenticationProvider" />    
</authentication-manager>

可以看到,自定义的 mongoUserDetailsS​​ervice 并没有分配给 authenticationManager 而是新的 casAuthenticationProvider,那么我们将 casAuthenticationProvider 设置为 authenticationManager

于 2013-08-23T16:22:32.980 回答