从Spring安全上下文访问Spring Web MVC异常解析器

问题描述

|| 我有一个带有“ 0”的Spring Web MVC配置,可以处理一些访问异常:
<bean class=\"org.springframework.web.servlet.handler.SimpleMappingExceptionResolver\" p:defaultErrorView=\"uncaughtException\">
    <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>
我也有一个Spring Security上下文配置,我想在其中处理一些与身份验证相关的异常。目前,我的ѭ2设置如下:
<form-login authentication-failure-handler-ref=\"exceptionMapper\" ... />

...

<bean id=\"exceptionMapper\" class=\"org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler\" >
    <property name=\"exceptionMappings\">
        <props>
            <prop key=\".CredentialsExpiredException\">/resetPassword</prop>
            <prop key=\".BadCredentialsException\">/login?failure=true</prop>
        </props>
    </property>
</bean>
我当时想通过将安全性映射移动到MVC配置,将它们整合到单个异常处理配置中会很不错。我的问题是我不知道如何告诉Spring Security我想要
form-login
authentication-failure-handler
使用解析器。 我不能只在
SimpleMappingExceptionResolver
添加
id
,因为1)
authentication-failure-handler-ref
需要一个处理程序,而不是解析器,以及2)在MVC配置中定义的任何bean在安全上下文中似乎都不可见... 谢谢你的帮助!     

解决方法

        为了回答问题的第2部分,您可以使用
<import resource=\"...\"/>
标记在配置之间共享bean定义。 我不确定第1部分(单个异常解析器)的成功程度,因为看过API后,这两个类完全不同-没有共享接口。您可能必须自己滚动,使用一个类作为平台并将另一个类的功能构建到其中。