经过数小时的搜索和跟踪Spring代码,我终于发现了正在发生的事情。我将其列出在这里,以防对他人有价值。
在
access-denied-handler使用通过
ExceptionTranslationFilter在的情况下
AccessDeniedException。但是,
org.springframework.web.servlet.DispatcherServlet首先尝试处理异常。具体来说,我使用
org.springframework.web.servlet.handler.SimpleMappingExceptionResolver定义了一个
defaultErrorView。因此,会
SimpleMappingExceptionResolver通过重定向到适当的视图来消耗异常,因此,没有剩余的异常会冒泡到
ExceptionTranslationFilter。
解决方法非常简单。配置
SimpleMappingExceptionResolver忽略所有
AccessDeniedException。
<bean > <property name="defaultErrorView" value="uncaughtException" /> <property name="excludedExceptions" value="org.springframework.security.access.AccessDeniedException" /> <property name="exceptionMappings"> <props> <prop key=".DataAccessException">dataAccessFailure</prop> <prop key=".NoSuchRequestHandlingMethodException">resourceNotFound</prop> <prop key=".TypeMismatchException">resourceNotFound</prop> <prop key=".MissingServletRequestParameterException">resourceNotFound</prop> </props> </property></bean>
现在,无论何时
AccessDeniedException抛出an
,解析器都会忽略它,并允许其将堆栈冒泡到
ExceptionTranslationFilter,然后调用
access-denied-handler来处理异常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)