У меня есть конфигурация 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, не кажутся видимыми из контекста безопасности ...
Спасибо за любую помощь!