我有一个ExceptionHandler(spring和security 5),它可以捕获所有其他ExceptionHandler都没有捕获到的异常,这很好:
@ControllerAdvice(basePackageClasses = BaseBackendController.class)
@Order(Ordered.LOWEST_PRECEDENCE)
public class GlobalExceptionHandler {
@ExceptionHandler(value = {Exception.class, RuntimeException.class})
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) {
}
}
但是,即使我添加了带有LOWEST_PRECEDENCE值的@Order批注,异常处理程序也捕获了AccessDeniedException。
暂时解决方案,我将此添加到defaultErrorHandler:
if(e instanceof AccessDeniedException){
throw (AccessDeniedException)e;
}
这行得通,但是我怀疑还有更多与Spring Security相关的异常,我宁愿不将它们全部添加到我的defaultErrorHandler中。
有人知道为什么AccessDeniedException被我的ExceptionHandler捕获而不由Spring安全处理吗?
答案 0 :(得分:0)
您应该为@ExceptionHandler
添加另一个AccessDeniedException
,然后只需在处理程序方法中重新抛出异常即可。这样会将AccessDeniedException
推广到Spring Security,并且可以处理错误。