2011-06-13 4 views
0

J'ai une configuration MVC Web Spring avec un SimpleMappingExceptionResolver en elle pour gérer des exceptions d'accès:Accès Spring Web MVC Exception résolveur de contexte Spring Security

<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> 

J'ai aussi une configuration de contexte Spring Security où je voudrais gérer certaines exceptions liées à l'authentification. À l'heure actuelle, j'ai un ExceptionMappingAuthenticationFailureHandler mis en place comme suit:

<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> 

Je pensais que ce serait bien de consolider ceux-ci dans une configuration de gestion des exceptions en déplaçant les applications de sécurité à la configuration MVC. Mon problème est que je ne sais pas comment dire à Spring Security que je veux form-loginauthentication-failure-handler pour utiliser le résolveur.

Je ne peux pas ajouter un id à SimpleMappingExceptionResolver parce que 1) authentication-failure-handler-ref attend un gestionnaire, pas un résolveur, et 2) les haricots qui sont définis dans la configuration MVC ne semble pas être visible à partir du contexte de sécurité. ..

Merci pour toute aide!

Répondre

0

Pour répondre à la partie 2) de votre question, vous pouvez partager des définitions de beans entre des configurations via l'utilisation de la balise <import resource="..."/>. Je ne suis pas sûr du succès que vous obtiendrez pour la partie 1) (résolveur d'exception unique), car ayant regardé l'API les deux classes sont complètement différentes - aucune interface partagée. Vous devrez peut-être lancer le vôtre, en utilisant l'une des classes comme plate-forme et en y intégrant les fonctionnalités de l'autre classe.