REST サービスに spring security 3.1 と Spring 3.2 を使用しています。ユーザーが何らかのリソースにアクセスしようとしたが、まだ認証されていない場合など、すべての応答を JSON にするのに苦労しています。また、ユーザーが間違ったリクエストを行った場合、JSON をエラー メッセージとともに返したいと考えています。
言及するだけで、すべてのエラー/例外をキャッチする必要があるグローバルな場所があれば、より受け入れられます。
REST サービスに spring security 3.1 と Spring 3.2 を使用しています。ユーザーが何らかのリソースにアクセスしようとしたが、まだ認証されていない場合など、すべての応答を JSON にするのに苦労しています。また、ユーザーが間違ったリクエストを行った場合、JSON をエラー メッセージとともに返したいと考えています。
言及するだけで、すべてのエラー/例外をキャッチする必要があるグローバルな場所があれば、より受け入れられます。
他のすべてのコントローラーによって拡張されたコントローラークラスを作成し (または 3.2 を使用している場合は @ControllerAdvice を使用)、そのクラスに例外ハンドラー注釈付きメソッドを含めてみませんか? このようなもの
@ExceptionHandler(Throwable.class)
public @ResponseBody GenericResponse handleException(Throwable throwable){
//handle exception
}
または、このブログ投稿をお読みください
アップデート
この返信が遅くなって申し訳ありません。これが私の提案です。403 応答で単純に失敗させます。そのためには、Spring セキュリティ構成に次のスニペットを追加するだけです。
<beans:bean id="entryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
entrypoint-ref をこの Bean に向ける
<http auto-config="true" use-expressions="true" entry-point-ref="entryPoint">
クライアント側では、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
}
}