Access Spring Web MVC Resolver из контекста безопасности Spring - PullRequest
0 голосов
/ 14 июня 2011

У меня есть конфигурация Spring Web MVC с SimpleMappingExceptionResolver для обработки некоторых исключений доступа:

<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 authentication-failure-handler использовал распознаватель.

Я не могу просто добавить id к SimpleMappingExceptionResolver, потому что 1) authentication-failure-handler-ref ожидает обработчик, а не резолвер, и 2) любые компоненты, определенные в конфигурации MVC, не кажутся видимыми из контекста безопасности ...

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 14 июня 2011

Чтобы ответить на часть 2) вашего вопроса, вы можете обмениваться определениями bean-компонентов между конфигурациями с помощью тега <import resource="..."/>.

Я не уверен, насколько успешной вы будете для части 1) (распознаватель единичных исключений), потому что, глядя на API, оба класса совершенно разные - нет общего интерфейса. Возможно, вам придется свернуть свой собственный, используя один из классов в качестве платформы и встроив в него функциональность другого класса.

...