2009-07-29 7 views
1

J'essaie de remplacer AuthenticationProcessingFilter par Spring. Je l'ai fait config suivante dans xml:Substitution de AuthenticationProcessingFilter de Spring

<security:http access-decision-manager-ref="accessDecisionManager" > 
     <security:intercept-url .../> 
     <security:form-login login-page='/signin/' authentication-failure-url="/signin/?login_error" default-target-url='/signin/success'/> 
     <security:anonymous/> 
     <security:logout/> 
     <security:remember-me/> 
</security:http> 

<bean class="myPackage.security.SessionCleanerFilter" > 
    <security:custom-filter position="FILTER_SECURITY_INTERCEPTOR" /> 
    <property name="defaultTargetUrl" value="/signin/success" /> 
    <property name="authenticationFailureUrl" value="/signin/?login_error" /> 
    <property name="allowSessionCreation" value="true" /> 
</bean> 

Mais cela ne fonctionne pas avec beaucoup d'exceptions

Erreur de création de haricot avec le nom 'myPackage.security.SessionCleanerFilter # 0'

due au manque de propriétés d'instation. Je voudrais qu'ils soient par défaut. Savez-vous comment les configurer?

Répondre

1

devrait-il pas:

<security:custom-filter position=“AUTHENTICATION_PROCESSING_FILTER”/> 
0

Vous devez également désactiver l'auto-config:

<security:http auto-config="false" access-decision-manager-ref="accessDecisionManager"> 

puis, on n'a plus besoin de la balise <security:form-login>, puisque vous réglez le même propriétés dans votre haricot.

+0

'auto-config' est faux par défaut, donc cela ne devrait pas être nécessaire. –

0

L'approche que vous devez suivre dépend uniquement de ce que vous voulez vraiment faire dans votre filtre personnalisé.

J'ai rencontré un problème similaire, jetez un oeil à ce poste pour quelques suggestions https://stackoverflow.com/a/12356510/686478.

security:form-login crée en interne une définition de haricot pour AuthenticationProcessingFilter, et donc re-définir à la même position (dans votre cas son FORM_LOGIN_FILTER ou AUTHENTICATION_PROCESSING_FILTER comme on l'appelait à 2.x) provoquerait une erreur, car le grain est déjà défini par gestionnaire d'espace de noms http . Voir la section Adding Your own filter du manuel de référence.

l'option facile est de définir la configuration automatique false, supprimer <form-login> et définir votre filtre auth en position prédéfinie, mais en faisant cela, vous aussi la facilité d'utilisation libre et la lisibilité de votre configuration de sécurité, et vous devrez gérer the dependencies of your AuthenticationProcessingFilter sur le vôtre (comme le réglage AuthenticationManager, filterProcessesUrl etc.). Si vous ne voulez pas écraser le filtre d'authentification existant mais que vous voulez juste effectuer un pré/post traitement, une autre alternative est de définir votre filtre personnalisé en utilisant les attributs after ou before, qui est invoqué avant ou après le filtre réel .

Note: Sur la base de votre ligne de sujet, je suppose que vous l'intention d'utiliser AUTHENTICATION_PROCESSING_FILTER et non FILTER_SECURITY_INTERCEPTOR qui est alias pour FilterSecurityInterceptor.

Je sais que ce genre de message pas à jour, mais j'espère que cela va aider quelques :)

Questions connexes