Tomcat 7 で Java Web アプリケーションを実行しています。バックエンドで Spring Security 3.1 を使用して Spring 3.2 を使用しており、/api/** パターンに従って RESTful URL を介して API を公開しています。
Web アプリケーションの UI は、BackboneJS を使用して構築されています。RESTful URL に直接マップされたバックボーン モデルを使用しています。
UI はフォーム ログイン認証を使用してロックされているため、ユーザーが現在認証されていない場合、ユーザーは常にログイン画面にリダイレクトされます。
http-basic 認証を使用して、同じ RESTful URL を別の外部サービスに公開しようとしています。残念ながら、同じ URL パターンを保護する場合、Spring では複数のフィルター チェーンを使用できないようです。構成ファイルで最初に定義されている方が優先されるようです。
同じ RESTful リソースに対して個別の URL パターンにマップする必要はありませんが、選択の余地はないようです。
これは、私の(現在壊れている)Spring セキュリティ構成の重要なサンプルです。
<!-- configure basic http authentication -->
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern="/**" access="ROLE_USER"/>
<http-basic/>
</http>
<!-- configure form-login authentication -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/ui/login" access="permitAll" />
<intercept-url pattern="/ui/logout" access="permitAll" />
<intercept-url pattern="/ui/loginfailed" access="permitAll" />
<intercept-url pattern="/**" access="ROLE_USER" />
<custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER" />
<form-login login-page="/ui/login" default-target-url="/" authentication-failure-url="/ui/loginfailed" />
<logout logout-success-url="/ui/logout" />
<session-management invalid-session-url="/ui/login"/>
</http>
私の質問は 、Spring Security を使用して、同じ URL パターンに対して 2 つの異なるタイプのセキュリティ (http-basic と form-login) を構成することは可能ですか? このタイプのシナリオのベスト プラクティスはありますか?
ありがとうございました。