私はRESTfull APIであり、より標準的なWebページの一部である私のWebアプリケーションの一部を持っています。Spring Security複数のfilterChainProxyマッピング/フィルタ、カスタムフィルタJson出力
私は、EntryPoint、SuccessHandler、FailureHandlerなどのカスタムフィルタを使用してREST部分を作成したいと考えています。この部分は/ rest/**マッピング内にあります。
その他のすべてのフィルタは、より一般的なフィルタを必要とし、/ **でマッピングされます。
問題は、異なるマッピングフィルタでfilterChainProxyを定義する簡単な方法を見つけることです。
今、このソリューションは動作しません:
<!-- Normal web app -->
<http auto-config="true" use-expressions="true" authentication-manager-ref="authenticationManager">
<form-login/>
<logout/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
<!-- Configure RESTfull services -->
<http use-expressions="true" authentication-manager-ref="authenticationManager" entry-point-ref="restAuthenticationEntryPoint" >
<form-login authentication-success-handler-ref="restAuthenticationSuccessHandler" login-page="/rest/login" username-parameter="username" password-parameter="password" />
<logout logout-url="/rest/logout" />
<intercept-url pattern="/rest/**" method="GET" access="hasRole('ROLE_USER')" />
<intercept-url pattern="/rest/**" method="POST" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="PUT" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="DELETE" access="hasRole('ROLE_ADMIN')" />
</http>
それは、と文句を言う:univseral試合は他のパターンの前にいます。
定義でfilterChainProxyを定義することなく、そのようなことを定義する方法はありますか? httpバージョンは、私が手動でUsernamePasswordAuthenticationFilterなどを設定しなければならないので、構成の量を減らすのにかなり役立ちます。
次の問題はもっと簡単です。私はフォームログイン認証の後に応答する必要があります。 JSONオブジェクト。
これまでのところ、私はSuccessHandler(実際にはリダイレクト部分のないSimpleUrlAuthenticationSuccessHandlerのバージョン)を実装しました。
JSON出力を書き込むにはどうすればよいですか?
HTTP 200 OK
と::
{"success":true,"customer {"email":"[email protected]","session_id":"b83a41dfaca6785399f00837888886e646ff9088"}}
とFailureHandlerと同様のこと
私はこのような何かを持っている必要があります。それはかなりシンプルでなければならず、確かに非常に基本的なことですが、どうしていますか?非常に単純なRESTクライアントが理解できない301リダイレクトステータスがあるため、カスタムコントローラへのリダイレクトは解決策ではありません。
少なくとも、httpヘッダーとボディーは一切持たないことを望みます。
ありがとうございました!
1つのApplicationContextに2つのドリフントインターフェイス(WWWとREST)のハンドリングを配置する理由は何ですか? 2つのコンテキスト/セッションの共有はありますか? WWWへのログインは、RESTへのログインも意味しますか?その場合は、なぜログインアクションを分離するのですか?いいえの場合は、なぜ一緒に置くのですか?単一の基礎となるサービス層に異なるインターフェースを提供する別個のアプリケーションではないでしょうか? – Roadrunner
通常のWebアプリケーションの中にREST部分があるようなものです。私は別の認証プロセスを望んでいない、私はちょうど他のフィルタが欲しい。 RESTの部分は認証がないときにエラーを表示するだけですが、Webページではユーザーをログインページにリダイレクトする必要があります。 – adreide