2009-07-29 3 views
1

Ich versuche AuthenticationProcessingFilter in Spring-Sicherheit zu überschreiben. Ich habe folgende config in xml getan:Spring's AuthenticationProcessingFilter überschreiben

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

Aber das scheitert mit vielen Ausnahmen

Fehler Bohne Erstellung mit dem Namen 'myPackage.security.SessionCleanerFilter # 0'

durch auf fehlende Instatiationseigenschaften. Ich möchte, dass sie Standard sind. Weißt du, wie man sie konfiguriert?

Antwort

1

Sollte es nicht sein:

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

Sie müssen auch Auto-config deaktivieren:

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

und dann müssen Sie nicht mehr den <security:form-login> Tag, da Sie das gleiche setzen Eigenschaften in Ihrer Bohne.

+0

'Auto-config' standardmäßig falsch ist, so dass nicht erforderlich sein sollte. –

0

Der Ansatz, dem Sie folgen müssen, hängt davon ab, was Sie wirklich in Ihrem benutzerdefinierten Filter tun möchten.

Ich stieß auf ähnliche Problem, sehen Sie sich diesen Beitrag für einige Vorschläge https://stackoverflow.com/a/12356510/686478.

security:form-login intern erstellt eine Bohne Definition für AuthenticationProcessingFilter, und daher ist es an derselben Position erneut zu definieren (in Ihrem Fall sein FORM_LOGIN_FILTER oder AUTHENTICATION_PROCESSING_FILTER wie es in 2.x genannt wurde) würden Fehler verursachen, da die Bean bereits von http Namespace-Handler definiert ist . Siehe Adding Your own filter Abschnitt des Handbuchs.

Einfache Option ist Auto-Config zu false setzen, entfernen <form-login> und definieren Sie Ihren Auth-Filter in vordefinierten Position, aber dadurch verlieren Sie auch Usability und Lesbarkeit Ihrer Sicherheitskonfiguration, und Sie müssen the dependencies of your AuthenticationProcessingFilter auf verwalten Ihre eigenen (wie Einstellung AuthenticationManager, FilterProcessesUrl etc.).

Wenn Sie den vorhandenen Auth-Filter nicht überschreiben möchten, sondern nur einige Vor-/Nachbearbeitungen durchführen möchten, können Sie auch einen benutzerdefinierten Filter mit after- oder before-Attributen definieren, der vor oder nach dem eigentlichen Filter aufgerufen wird .

Hinweis: Basierend auf der Betreffzeile, ich nehme an, Sie AUTHENTICATION_PROCESSING_FILTER und nicht FILTER_SECURITY_INTERCEPTOR verwenden sollen, die Alias ​​für FilterSecurityInterceptor ist.

Ich weiß, diese Art von veralteter Post ist, aber ich hoffe, das einige helfen :)