このような方法で認証プロセスをカスタマイズする必要があります。
- クライアントは「特別な」URL パラメータを使用してリクエスト (REST API) を送信します
- サーバーは、param を渡してユーザー名を受け取るサードパーティ サービスを呼び出します
- サーバーはデータベースを名前で検索し、これが認証されたプリンシパルです。
サーバー側 (2+3) を 2 つの部分 (ユーザー名を取得する (2) のカスタム フィルター) とuserdetailservice
、データベースで名前を検索してプリンシパルを構築する (3) のカスタム フィルターに分割しました。
security.xml
しかし、フィルターをまったく処理していないように見えるたびに、正しくビルドできません。問題は最初の(http)ノードにあると思いますが、フィルターをどの位置に設定すればよいかわかりません。これが私の設定です:
<http use-expressions="true" auto-config="true" authentication-manager-ref="authenticationManager">
<intercept-url pattern="/*" access="isAuthenticated" />
<custom-filter ref="casServiceTicketFilter" position="FIRST"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="wliAuthenticationService"/>
</authentication-manager>
<b:bean id="casServiceTicketFilter" class="org.WLICASAuthenticationFilter">
<b:property name="casTicketValidateURL" value="${cas.ticket.validate.url}"/>
<b:property name="authenticationManager" ref="authenticationManager"/>
</b:bean>
<b:bean id="wliAuthenticationService" class="org.WLIUserDetailService"/>
PS-Springにはすぐに使えるCASサポートがあるとは言わないでください。構成が少し異なるため、サービス チケット バリデーターの独自の実装を作成する必要があります。