13

other をオーバーライドせずに名前空間構成を使用して、Spring セキュリティでフォームベース認証と基本認証の両方に言及することは可能ですか? アプリケーションがブラウザベースのリクエストとリモートクライアントの両方に対応できるようにします。

4

4 に答える 4

10

@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フィルターを前に置くことが最善の選択肢かどうかはわかりません。

于 2010-04-29T18:39:09.400 に答える
6

あなたが望む最終結果は可能です、私はまったく同じ問題に遭遇しました、そしてここに私の解決策があります。

名前空間で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によって修正されるようであり、この回避策は不要になります。

于 2009-11-06T19:45:54.163 に答える
1

Spring Security 3.1.0 で可能になりました

于 2010-12-14T18:03:43.870 に答える
0

名前空間の構成を使用してフォーム認証とベーシック認証の両方を宣言することはできないようです。

春のコミュニティへの参照リンク: http://forum.springsource.org/showthread.php?t=72724&highlight=form+basic+authentication

于 2009-08-20T09:38:45.617 に答える