在将@Order与LOWEST_PRECEDENCE结合使用时,ExceptionHandler捕获AccessDeniedException吗?

时间:2018-10-04 12:30:56

标签: java spring-security

我有一个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安全处理吗?

1 个答案:

答案 0 :(得分:0)

您应该为@ExceptionHandler添加另一个AccessDeniedException,然后只需在处理程序方法中重新抛出异常即可。这样会将AccessDeniedException推广到Spring Security,并且可以处理错误。