Pregunta

Tengo CAS 3 Spring 3.2 y Spring Security 3.2 ejecutándose en Tomcat 7 con una base de datos MySQL.

Utilizamos la base de datos MySQL con CAS para autenticar a los usuarios, luego pasamos atributos después de éxito, obtenemos esos detalles de una base de datos llamada 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>

Después de eso, lo que queremos hacer es obtener el nombre de usuario de esos atributos, luego vaya a una base de datos específica de la aplicación, se llame "aplicación".

Entonces, lo que queremos hacer es obtener el nombre de usuario de CAS después de la autenticación exitosa, luego obtener sus roles de la base de datos.

¿Cómo podemos hacerlo correctamente?

ACTUALIZAR

Ok, ahora lo que he probado hasta ahora y realmente no sé que es válido o no.

He implementado UserDetailsService Y creé un UserEntityDetails que extiende mi UserEntity e implementos UserDetails, Entonces usé mi UserDetailsService Para cargar mi clase creada a medida.

Entonces en mi XML hice esto

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

Esta es la manera correcta de hacerlo ?

¿Fue útil?

Solución

A menos que esté malinterpretando su pregunta, lo que está pidiendo es el patrón de uso normal, el CasAuthenticationProvider está configurado con un UserDetailsService que carga los roles de una base de datos local en lugar de CAS.

Si echas un vistazo al Configuración de la aplicación de muestra de CAS, simplemente reemplazarías el userService Bean con su propia implementación que cargó la información del usuario desde su base de datos específica de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top