从Spring Security Context访问Spring Web MVC异常解析器

时间:2011-06-13 20:58:41

标签: spring spring-mvc exception-handling spring-security

我有一个带有SimpleMappingExceptionResolver的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上下文配置,我想处理一些与身份验证相关的异常。目前,我的ExceptionMappingAuthenticationFailureHandler设置如下:

<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的{​​{1}}使用解析器。

我不能只将authentication-failure-handler添加到id,因为1)SimpleMappingExceptionResolver需要一个处理程序,而不是一个解析程序,以及2)在MVC配置中定义的任何bean从安全背景来看似乎是可见的......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

要回答问题的第2部分,您可以通过使用<import resource="..."/>标记在配置之间共享bean定义。

我不确定你对第1部分(单一异常解析器)的成功程度,因为看过API这两个类完全不同 - 没有共享接口。您可能需要自己滚动,使用其中一个类作为平台,并将其他类的功能构建到其中。