2013-08-11 8 views
5

私はスプリングセキュリティ3.1とスプリング3.2をRESTサービスに使用しています。 私はすべてのレスポンスをJSONにするのに苦労しています。ユーザーがリソースにアクセスしようとしたが、まだ認証されていない場合 また、ユーザーが間違ったリクエストをした場合は、エラーメッセージとともにJSONを返したいと思います。JSONレスポンスによるスプリングセキュリティエラー処理

私はすべてのエラー/例外を捕まえるべきグローバルな場所を持つことがより受け入れられるだろうと言及するだけです。

+0

を追加私はバネのセキュリティ部分で自分自身を1つ。これに対する解決策はまだ見つかりませんか?理想的には、クライアントが処理できるようにjsonで定義された1つのエラーオブジェクトが必要です。 – Michael

答えて

3

他のすべてのコントローラで拡張されたコントローラークラスを作成しないでください(3.2を使用している場合は@ControllerAdviceを使用します)。そのクラスに例外ハンドラーの注釈付きメソッドを組み込むのはなぜですか?この

@ExceptionHandler(Throwable.class) 
public @ResponseBody GenericResponse handleException(Throwable throwable){ 
//handle exception 

} 

または読み取り、このブログpost

UPDATE

この返事が遅れて申し訳ありません

のようなもの。ここに私の提案があります。 403レスポンスで失敗するようにしてください。そのためには、春のセキュリティ設定で次のスニペットを追加してください。このBean

<http auto-config="true" use-expressions="true" entry-point-ref="entryPoint"> 

とクライアント側での

<beans:bean id="entryPoint" 
    class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" /> 

とポイントエントリポイント-REF、あなたのAJAXコードで、私は現在、これを把握しようとしていますエラーブロック

  error : function(jqXHR, textStatus, errorThrown){ 
       if (jqXHR.status == 403){ 
        alert('you need to login to do this operation'); 
        window.location.href = contextPath+"/signin"; 
// or whatever you want to 
       } 
      } 
+3

私の問題を解決しない、間違った要求をキャッチしません。たぶん春のセキュリティのためです。この答えを正しいものとして受け入れることはできません。 – Zemzela

+1

Zemzelaが述べたように、コントローラが呼び出される前に例外やエラーがスローされるため、これは春のセキュリティに関する問題を処理しません。 – Michael

+0

@Michael:私の悪い点は、ディスパッチャーサーブレットが呼び出される前に認証が行われたという点です。私は私の答えを更新しました。あなたの洞察力を与えてください。 – shazinltc

関連する問題