2012-05-30 30 views
5

私は、Spring Securityの処理認証でジャージー・アプリケーションを構成しました。 jersey-springパッケージは、web.xmlにサーブレットとして登録されているSpringServletクラスを提供しています。ジャージとフィルター例外処理

認証とすべて正常に動作します。私が思っているのは、ExceptionMapperを使用して処理するために、Jerseyサーブレットを介してAuthenticationExceptions(およびその他のフィルタ例外)を送信する方法です。

元々、SpringServletはフィルタとして設定されていましたが、読んだ後、サーブレットがフィルタにスローされた例外を処理できるようになったことが分かりました。私はサーブレットに変更した後の動作の変化に気付かず、Spring Securityコードをトレースすると、HttpServletResponseがどこに書き込まれているかを見ることができます。

私の質問:Spring Securityフィルタによってスローされたジャージーサーブレット例外を処理することは可能ですか?

+0

こんにちは、あなた自身の設定を示すSSCCEを公開することは可能ですか? –

+0

はい、私はチャンスを得るとすぐに小さなサンプルを追加します。 –

答えて

0

どのようにするかは、Spring SecurityからJerseyを呼び出すか、JerseyからSpring Securityを呼び出すかによって異なります。

Jerseyコンテナ内からSpring Securityを呼び出す場合は、適切な例外に対して例外マッパーを定義する以外の操作は必要ありません。

クライアントがSpring Securityフィルタを渡した後でJerseyを呼び出す場合、クライアント要求がこれらのフィルタを通過している間にスローされた例外は、Jerseyによって捕捉されません(要求はまだJerseyコンテナに入っていないためです) 。

  1. キャッチカスタム認証フィルタでAuthenticationExceptionAuthenticationFailureHandler.onAuthenticationFailure()方法(例外を渡す)を呼び出し、とすることにより、フィルタ・チェーンを破ることを確認してください:ジャージー容器内に例外がにある「取得」するための一つの方法ない設定FilterChain.doFilter()
  2. 呼び出すあなたAuthenticationFailureHandlerで(再スロー当時と)スプリングによって生成された例外を取得します、あなたのデザインのジャージーリソースを呼び出すためのHttpServletRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION)

ジャージーランドへの例外を「取得する」他の方法があるかもしれませんが、これは過去に私のために働いた方法の1つです。

+0

この本当に古い質問に対するお返事ありがとうございます。問題は残っていますが、できるだけ早くあなたの提案を試していきます。私はhvaen'tは今でもしばらくの間、プロジェクトに取り組んだ! –

+0

おっと、問題がとても古くなったとは気付かなかった。 – maxenglander