Spring异常处理程序不处理某些类型的异常

我在spring 2.5应用程序中设置了一个简单的异常处理程序。当前,它捕获所有Exceptions并显示一个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

回到顶部