我们处理此问题的方法是拥有一个自定义的异常解析器类,该类可处理其他处理程序未捕获的任何异常-
它实现HandlerExceptionResolver,Ordered。
我们声明一个捕获特定异常的单独SimpleMappingExceptionResolver bean。
这样的顺序使得我们的自定义解析程序在SimpleMappingExceptionResolver之后运行。
结果是指定的异常(例如AccessDeniedException)由SimpleMappingExceptionResolver处理并定向到适当的页面。
其他任何运行时异常都由自定义解析器处理,该解析器转发到一般错误页面。
<bean > <property name="exceptionMappings"> <props> <prop key="org.springframework.security.AccessDeniedException">accessDenied</prop> <prop key="org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException">accessDenied</prop> </props> </property> <property name="order" value="0"/></bean><bean > <property name="order" value="1"/></bean>
这种安排使您可以使用Spring解析器捕获尽可能多的异常(我在这里捕获2个AccessDenied和HibernateOptimisticLockingFailureException),而其他所有异常都由自定义解析器捕获。在上面接受的解决方案中,您必须编写更多的Java代码来捕获AccessDenied以外的异常。



