【发布时间】:2015-09-04 16:39:48
【问题描述】:
我在 Spring Security 3.2 和 Spring 4.1.7 (Boot 1.2.5) 中使用全局方法安全性。 Spring 的全局方法安全拦截器抛出AccessDeniedException。但是,我有一个用@ControllerAdvice 注释的异常处理程序,并带有一个捕获Exception 的ExceptionHandler 方法,因此AccessDeniedException 不会传播到Spring Security ExceptionResolvingFilter;因此,它不是由 Spring Security 处理的。
我尝试遵循here 的建议并创建了另一个专门处理AccessDeniedException 的ExceptionHandler 方法并简单地重新抛出它。但是这个例外再次没有弥补 Spring Security 的问题。它在第 366 行被 Spring 的 ExceptionHandlerExceptionResolver 吞噬:
// ============ SPRING'S EXCEPTIONHANDLEREXCEPTIONRESOLVER CODE ==========
try {
if (logger.isDebugEnabled()) {
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
}
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception);
}
catch (Exception invocationEx) {
if (logger.isErrorEnabled()) {
logger.error("Failed to invoke @ExceptionHandler method: " + exceptionHandlerMethod, invocationEx);
}
return null;
}
如何让AccessDeniedException 传播到 Spring Security?我必须创建一个自定义 ExceptionResolver 并继承并重写该方法吗?
【问题讨论】:
标签: spring spring-mvc spring-security