Spring异常处理程序不处理某些类型的异常
我在spring 2.5应用程序中设置了一个简单的异常处理程序。当前,它捕获所有Exception
s并显示一个stacktrace页面。
这很好,但是现在Spring Security不能正确地将未登录的用户踢到登录页面,而是显示了带有Spring Security异常的异常页面:
org.springframework.security.AccessDeniedException
问题在于此应用程序没有用于所有异常的自己的Exception子类,因此我必须映射Exception
但取消映射AccessDeniedException
2.5spring有可能吗?
:与spring安全2.0.1
我的豆子看起来像这样
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings">
<props>
<prop key="java.lang.RuntimeException">common/error</prop>
</props>
</property>
</bean>**
回答:
我们处理此问题的方法是拥有一个自定义的异常解析器类,该类可处理其他处理程序未捕获的任何异常-
它实现HandlerExceptionResolver,Ordered。
我们声明一个捕获特定异常的单独SimpleMappingExceptionResolver bean。
这样的顺序使得我们的自定义解析程序在SimpleMappingExceptionResolver之后运行。
结果是指定的异常(例如AccessDeniedException)由SimpleMappingExceptionResolver处理并定向到适当的页面。
其他任何运行时异常都由自定义解析器处理,该解析器转发到一般错误页面。
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <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 class="package.to.your.handler.DefaultExceptionResolver">
<property name="order" value="1"/>
</bean>
这种安排使您可以使用Spring解析器捕获尽可能多的异常(我在这里捕获2个AccessDenied和HibernateOptimisticLockingFailureException),而其他所有异常都由自定义解析器捕获。在上面接受的解决方案中,您必须编写更多的Java代码来捕获AccessDenied以外的异常。
以上是 Spring异常处理程序不处理某些类型的异常 的全部内容, 来源链接: utcz.com/qa/398855.html