2010-10-17 12 views
5

Ich verwende Spring Security 3.0 mit JSPs. Ich habe einen RequireVerificationFilter erstellt, der nicht überprüfte Benutzer auf eine Seite "Bestätige deine E-Mail" umleitet.Spring Security 3.0: Wie gebe ich URLs an, auf die ein benutzerdefinierter Filter angewendet wird?

habe ich die Filter auf den Federsicherheitsfilterstapel auf den letzten Platz in etwa so:

Bean Definition in meinem app-config.xml:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 

Filter hinzugefügt Sicherheitsfilterliste zu springen meinem security-config.xml:

<custom-filter ref="requireVerificationFilter" after="LAST" /> 

Der Filter funktioniert, aber es filtert seine eigene Weiterleitungs-URL. Das heißt, der Filter leitet nicht verifizierte Benutzer an/access/verify um, aber diese URL wird auch vom Filter abgefangen, der die Weiterleitung ad infinitum versucht.

Ich versuchte mit dem <filter-mapping>-Tag, um die URLs zu beschränken, auf die dieser neue Filter zutrifft, aber das scheint nicht so zu funktionieren, wie ich dachte. Hier ist der web.xml Eintrag ich sowieso hinzugefügt:

<filter> 
     <filter-name>requireVerificationFilter</filter-name> 
     <filter-class>com.ebisent.web.RequireVerificationFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>requireVerificationFilter</filter-name> 
     <url-pattern>/account/*</url-pattern> 
    </filter-mapping> 

Ich las „Hinzufügen in Selbst erstellte Filter“ im Frühjahr Sicherheit Dokumention, aber keine Antwort finden.

Meine Frage ist, wie kann ich angeben, auf welche URLs mein Filter angewendet wird?

UPDATE:

ich diese Arbeit bekam durch Angabe der URL innerhalb des Filters selbst zu ermöglichen. Das funktioniert gut für mich, aber wenn es eine bessere/mehr "federnde" Art gibt, es zu tun, würde ich mich freuen, es zu hören.

Antwort

2

Sie haben diese xml in der aktuellen Konfiguration zu tun (an gleicher Stelle haben Sie die <custom-filter ref="requireVerificationFilter" after="LAST" />.

<http ...> 
    <intercept-url pattern="/access" ... filters="..., requireVerificationFilter, ..." /> 
    <intercept-url pattern="/verify" ... filters="none" /> 
    ... 
</http> 

etwas in diese Richtung, können Sie eine Liste der Filter festlegen, die Sie ausführen möchten und diejenigen, die Sie ausschließen nicht (und "keine" bedeutet keine.) Sie sollten Tyour Filter nicht zu der web.xml hinzufügen müssen - nur inline mit der Spring Security Filterkette.

+0

Vielen Dank! Ich habe intercept-URL-Tags in meiner Sicherheitskonfiguration, aber ich wusste nicht, dass Sie dort Filter angeben können. – outis

+5

Aber [Spring Security Referenz-Dokumentation] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents) sagt, dass: 'filters' Attribut" Kann nur den Wert "none" annehmen ". – btpka3

3

Sie sollten org.springframework.security.web.FilterChainProxy dafür verwenden. Das Attribut Filter sollte nur containts none:

<http ...> 
     <custom-filter ref="requireVerificationFilterChain" after="LAST" /> 
</http> 

<b:bean id="requireVerificationFilterChain" class="org.springframework.security.web.FilterChainProxy"> 
     <filter-chain-map request-matcher="ant"> 
      <filter-chain pattern="/account/*" filters="requireVerificationFilter"/> 
     </filter-chain-map> 
</b:bean> 
<b:bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 
+0

Diese Lösung hat für mich funktioniert, Danke! –