other をオーバーライドせずに名前空間構成を使用して、Spring セキュリティでフォームベース認証と基本認証の両方に言及することは可能ですか? アプリケーションがブラウザベースのリクエストとリモートクライアントの両方に対応できるようにします。
4 に答える
@grimesjmによる応答は正しいです。ただし、Spring 3.x を使用している場合は、クラス名を次のように変更する必要があります。
<bean id="basicProcessingFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager">
<ref bean="authenticationManager" />
</property>
<property name="authenticationEntryPoint">
<ref bean="authenticationEntryPoint" />
</property>
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="Your realm here" />
</bean>
と
<sec:http auto-config="true">
... your intercept-url here
<sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />
<sec:form-login ... />
....
</sec:http>
SECURITY_CONTEXT_FILTER
フィルターを前に置くことが最善の選択肢かどうかはわかりません。
あなたが望む最終結果は可能です、私はまったく同じ問題に遭遇しました、そしてここに私の解決策があります。
名前空間でform-loginを定義すると、名前空間を介して適用する他の認証フィルターが自動的に上書きされます。これは、フィルターチェーンの順序付けによって行われます。SpringSecurityのFilterChainOrder.javaを見て、順序が実際に各フィルターにどのように適用されるかを確認してください。
これを回避するには、名前空間からhttp-basicタグを削除してから、基本認証を処理するBeanを手動で定義し、AuthenticationProcessingFilterの前にその順序を配置します。これは、フォームログインを処理するスプリングセキュリティフィルターであるためです。
BasicProcessingFilterスプリングは、基本認証を処理するために提供します。これは、クレデンシャルが欠落している場合、要求を処理する適切なフィルターが見つかるまでフィルターチェーンを継続することを意味します。
これで、BasicProcessingFilter Beanを手動で定義することにより、フィルターチェーンに表示される順序を設定できます。以下は、セキュリティxmlで提供する必要がある追加のxml宣言の例です(Spring Security <3.x)
<bean id="basicProcessingFilter" class="org.springframework.security.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager"><ref bean="authenticationManager"/></property>
<security:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/>
<property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property>
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="My Realm Here"/>
</bean>
また、authenticationManager参照が見つからない場合は、以下のように名前空間にエイリアスを追加できます。
<security:authentication-manager alias="authenticationManager"/>
最終結果は、基本フィルターがパッシブフィルターとして適用され、必要な資格情報が欠落している場合、フィルターチェーンを継続し、フォームログインフィルターがそれを処理します。
このアプローチの問題は、資格情報が正しく入力されている場合、フォームログインフィルターからのログインページが返されることです。
ただし、この問題は、Spring Securityのバージョン3.1でSpringによって修正されるようであり、この回避策は不要になります。
Spring Security 3.1.0 で可能になりました
名前空間の構成を使用してフォーム認証とベーシック認証の両方を宣言することはできないようです。
春のコミュニティへの参照リンク: http://forum.springsource.org/showthread.php?t=72724&highlight=form+basic+authentication