1

ユーザーが特定の URI パターンにアクセスできない場合にログインフォームが表示されないように、Spring Security 構成で条件を作成することは可能ですか?

現在、次の構成があります:-

<security:http auto-config="true">
    <security:form-login login-page="/" authentication-failure-url="/?login_error=1" default-target-url="/" always-use-default-target="true"/>
    <security:logout logout-success-url="/"/>
    <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER"/>
    <security:intercept-url pattern="/api/**" access="ROLE_WEBSERVICE"/>
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
</security:http>

これは私がSpring Securityに処理させたいものです:-

  1. /secure/**ユーザーがブラウザから適切にアクセスせずにヒットした場合、ログイン フォームが表示される必要があります。この構成は、この要件を満たしています。
  2. ユーザーが適切なアクセスなしでヒットした場合/api/**、ログイン フォームを表示する代わりに 403 エラーをスローします。その理由は、ユーザーがプログラムで JavaScript から、または curl を使用して Web サービスを呼び出す可能性があり、応答でログイン フォームの HTML ソース コードを返す意味がないためです。
  3. Use は、他のWeb サービス/api/loginを使用する前に、自分自身を認証するために呼び出します。/api

Spring Security を使用してこの Web アプリを構築してきましたが、問題なく動作しています。ただし、現在、Web サービスを介していくつかの機能を公開できるようにする必要があり、Spring Security を使用して Web アプリと Web サービスの両方を保護するのに苦労しています。

どんな提案でも大歓迎です。ありがとう。

4

1 に答える 1

2

着信要求パスのパターンに基づいて複数のフィルター チェーンを定義し、それを使用して Web サービス部分をブラウザー アクセスから分離できます。

/apiフィルタ チェーンの場合、を定義し、それを属性 Http403ForbiddenEntryPointとして設定します。entry-point-ref

<http pattern="/api/**" entry-point-ref="forbiddenEntryPoint">
   ...
</http>

<http>
   ... standard form-login etc., as you have now
</http>

<bean id="forbiddenEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
于 2013-03-29T20:22:19.263 に答える