を無視して呼び出します。私はここにある特定の例外に焦点を当てたことだし、それはによってスローされAccessDeniedExceptionある春のセキュリティ - Ajaxは私がこのように定義されたすべての例外を処理する私のプロジェクトでは、コントローラ持っ@ExceptionHandler
@ControllerAdvice
public class GlobalExceptionHandlingController {
@ResponseBody
@ExceptionHandler(value = AccessDeniedException.class)
public ResponseEntity accessDeniedException() {
Logger.getLogger("#").log(Level.SEVERE, "Exception caught!");
return new ResponseEntity("Access is denied", HttpStatus.FORBIDDEN);
}
}
を許可されていないリクエストに対するSpring Security。これは「通常の」別名非Ajaxリクエストに対して正しく機能しています。私はリンクをクリックするか、ロケーションバーにURLを直接入力することができます。リクエストが許可されていない場合は、このメッセージが表示されます。
しかし、AJAXリクエスト(Angularを使用)では、応答として標準403エラーページが表示されますが、面白いのは、このコントローラでAccessDeniedExceptionが検出されたことがわかります!
私はいくつかの研究を行なったし、私が、私はこれを作ったカスタムAccessDeniedHandlerを持っている必要がありますようだ:
を追加しました私の春のセキュリティの設定でこの行:
.and()
.exceptionHandling().accessDeniedPage("/error/403/");
と私はちょうどに専用コントローラを作りました
@Controller
public class AjaxErrorController {
@ResponseBody
@RequestMapping(value = "/error/403/", method = RequestMethod.GET)
public ResponseEntity accessDeniedException() {
return new ResponseEntity("Access is denied (AJAX)", HttpStatus.FORBIDDEN);
}
}
これはうまくいきますが、例外はまだ最初のコントローラで捕捉されますが、そのメソッドの戻り値はgettiです無視される。どうして?
これはどのように行われるのですか?私はここで何かを逃していると感じています。
私はSpring 4.2.5とSpring Security 4.0.4を使用しています。