내가 당신의 질문을 오해하지 않는 한, 당신이 요구하는 것은 정상적인 사용 패턴입니다 - CasAuthenticationProvider
a로 구성됩니다 UserDetailsService
CAS가 아닌 로컬 데이터베이스의 역할을로드합니다.
당신이 CAS 샘플 응용 프로그램 구성, 당신은 단순히 그것을 교체합니다 userService
애플리케이션 별 데이터베이스에서 사용자 정보를로드 한 자체 구현이있는 Bean.
문제
CAS 3 Spring 3.2와 Spring Security 3.2가 MySQL 데이터베이스와 함께 Tomcat 7에서 실행됩니다.
우리는 CAS와 함께 MySQL 데이터베이스를 사용하여 사용자를 인증 한 다음 성공 후 속성을 전달하고 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>
그 후 우리가하고 싶은 것은 해당 속성에서 사용자 이름을 얻은 다음 "앱"이라는 응용 프로그램 특정 데이터베이스로 이동하는 것입니다.
따라서 우리가 원하는 것은 성공적인 인증 후 CAS로부터 사용자 이름을 얻은 다음 데이터베이스에서 역할을 얻는 것입니다.
어떻게 올바르게 할 수 있습니까?
업데이트
좋아, 지금 내가 지금까지 시도한 것은 실제로 모른다.
나는 구현했다 UserDetailsService
그리고 나는 a UserEntityDetails
내 확장 UserEntity
그리고 구현 UserDetails
, 그 다음 나는 나의 것을 사용했다 UserDetailsService
내 맞춤형 클래스를로드합니다.
그런 다음 내 XML에서 나는 이것을 만들었다
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="casAuthProvider" user-service-ref="DBUserServiceDetails" />
</security:authentication-manager>
이것이 올바른 방법입니까?
해결책
내가 당신의 질문을 오해하지 않는 한, 당신이 요구하는 것은 정상적인 사용 패턴입니다 - CasAuthenticationProvider
a로 구성됩니다 UserDetailsService
CAS가 아닌 로컬 데이터베이스의 역할을로드합니다.
당신이 CAS 샘플 응용 프로그램 구성, 당신은 단순히 그것을 교체합니다 userService
애플리케이션 별 데이터베이스에서 사용자 정보를로드 한 자체 구현이있는 Bean.