私があなたの質問を誤解していない限り、あなたが求めているのは通常の使用パターンです - CasAuthenticationProvider
で構成されています UserDetailsService
CASではなくローカルデータベースから役割をロードします。
を見てみると CASサンプルアプリケーション構成, 、単に置き換えます userService
アプリケーション固有のデータベースからユーザー情報をロードした独自の実装を使用してBean。
質問
CAS 3 Spring 3.2とSpring Security 3.2がMySQLデータベースを使用してTomcat 7で実行されています。
CASを使用してMySQLデータベースを使用してユーザーを認証し、成功後に属性を渡し、「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>
その後、これらの属性からユーザー名を取得し、「APP」と呼ばれるアプリケーション固有のデータベースに移動します。
したがって、認証が成功した後、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
で構成されています UserDetailsService
CASではなくローカルデータベースから役割をロードします。
を見てみると CASサンプルアプリケーション構成, 、単に置き換えます userService
アプリケーション固有のデータベースからユーザー情報をロードした独自の実装を使用してBean。