11

に従って、基本認証とフォームベース認証を使用して spring-security を構成しauto-config='true'ました。

/api/**下のエンドポイントでフォーム ベースのセキュリティを使用しないようにしたいと考えています。外部の他のエンドポイントで/api/**は、フォーム ベースのログインを使用する必要があります。401で資格情報を提供しなかったこれらのエンドポイントへの呼び出しに対して、応答が送信されることを希望します/api/**

更新: 以下の Luke Taylor のコメントのおかげで、次の解決策を思いつきました。

: この手法は、spring-security 3.1 以降でのみ適用できます。

最初に私は選び出し/api/**ます。セッションを作成することはありませんが、利用可能な場合は使用します。これは によって処理されcreate-session="never"、 を使用し<session-management/>ます。

<http pattern="/api/**" create-session="never" use-expressions="true">
    <http-basic />
    <session-management />
    <intercept-url pattern="/api/**" access="hasRole('API_ACCESS')"/>
</http>

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/" access="permitAll"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>
</http>
4

1 に答える 1

19

<http>Spring Security 3.1 では、2 つの個別の要素を使用して、アプリケーションの安静部分と非安静部分を個別のフィルター チェーンに分割することをお勧めします。デフォルト チェーンは通常のフォーム ログイン構成を使用できますが、安らかな API チェーンはステートレスで基本認証を使用するように構成できます。

次に、次のようなものがあります。

<http pattern="/api/**" create-session="stateless">
    <intercept-url pattern="/api/**" access="ROLE_API_USER" />
    <http-basic />        
</http>

<!-- No pattern attribute, so defaults to matching any request -->
<http>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login />        
</http>

チェーンの定義は、最も具体的なパターンから最も一般的なものへと順序付けする必要があるため、デフォルトのチェーンが最後になります。

于 2012-08-15T11:22:15.377 に答える