Я пытаюсь подключиться из весеннего приложения безопасности к серверу cas. Когда я вхожу в CAS, запрос перенаправляется в мое веб-приложение, но в моем UserDetailsService я получаю _cas_stateful_ в качестве имени пользователя, и я не могу найти своего пользователя в веб-приложении для загрузки разрешений.
Сервер jasig cas возвращает _cas_stateful_ в качестве имени пользователя с помощью spring
Ответы (1)
Проблема была в 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>
Как видите, пользовательский mongoUserDetailsService назначается не для authenticationManager, а для нового casAuthenticationProvider, затем мы устанавливаем casAuthenticationProvider для authenticationManager.
person
jesus.barbero
schedule
23.08.2013