2010-10-17 17 views
5

Używam Spring Security 3.0 ze stronami JSP. Utworzyłem RequireVerificationFilter, który przekierowuje niezweryfikowanych użytkowników na stronę "zweryfikuj swoją pocztę".Spring Security 3.0: Jak określić adresy URL, do których ma zastosowanie filtr niestandardowy?

dodałem filtr ze stosu wiosna filtra bezpieczeństwa na ostatnim miejscu w taki sposób:

Bean definicja w moim app-config.xml:

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

Filter dodany do wiosny listę filtrów zabezpieczeń w moim security-config.xml:

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

Filtr działa, ale filtruje własny przekierowany adres URL. Oznacza to, że filtr przekierowuje niezweryfikowanych użytkowników do/access/verify, ale ten URL jest również przechwytywany przez filtr, który próbuje przekierować reklamę w nieskończoność.

Próbowałem użyć znacznika <filter-mapping>, aby ograniczyć adresy URL, do których odnosi się ten nowy filtr, ale to nie działa tak, jak myślałem. Oto wpis web.xml dodałam i tak:

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

Czytam poprzez „Dodawanie we własnych filtrów” w zabezpieczenia dokumentację, sprężyny, ale nie znalazł odpowiedzi.

Moje pytanie brzmi: Jak mogę określić, które adresy URL, mój filtr dotyczy?

UPDATE:

dostałem tej pracy przez podanie adresu URL, aby umożliwić w obrębie samego filtra. To działa dobrze dla mnie, ale jeśli istnieje lepszy/bardziej "sprężysty" sposób, aby to zrobić, byłbym zadowolony z usłyszenia go.

Odpowiedz

2

Musisz zrobić to wewnątrz rzeczywistej xml konfiguracji (to samo miejsce masz <custom-filter ref="requireVerificationFilter" after="LAST" />.

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

coś wzdłuż tych linii można określić listę filtrów, które chcesz uruchomić i wykluczyć te, które nie (i "none" oznacza brak) Nie powinieneś dodawać filtra sieci do web.xml - tylko w linii z łańcuchem filtrów Spring Security

+0

Dziękujemy! W mojej konfiguracji zabezpieczeń mam tagi przechwytywania-adresu URL, ale nie wiedziałem, że możesz tam określić filtry. – outis

+5

Ale [Wiosna Bezpieczeństwo Dokumentacja Reference] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents) mówi, że: "filters" atrybut "Może tylko przyjąć wartość" none "". – btpka3

3

Powinieneś użyć do tego celu org.springframework.security.web.FilterChainProxy. zawiera tylko 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

To rozwiązanie sprawdziło się, dzięki! –