2010-10-17 19 views
5

Sto utilizzando Spring Security 3.0 con JSP. Ho creato un RequireVerificationFilter che reindirizza gli utenti non verificati a una pagina "verifica la tua email".Spring Security 3.0: come si specificano gli URL ai quali si applica un filtro personalizzato?

ho aggiunto il filtro alla pila di filtri di sicurezza primavera all'ultimo posto in questo modo:

definizione Bean nella mia app-config.xml:

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

Filtro aggiunto alla primavera lista dei filtri di sicurezza nel mio security-config.xml:

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

Il filtro funziona, ma filtra il proprio URL di reindirizzamento. Cioè, il filtro reindirizza gli utenti non verificati a/access/verify, ma tale URL viene catturato anche dal filtro, che tenta il reindirizzamento all'infinito.

Ho provato a utilizzare il tag <filter-mapping> per limitare gli URL a cui questo nuovo filtro si applica, ma non sembra funzionare come pensavo. Ecco la voce di web.xml ho aggiunto in ogni caso:

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

ho letto "Aggiungendo i propri filtri" nel documention sicurezza primavera, ma non ha trovato una risposta.

La mia domanda è, come posso specificare a quali URL viene applicato il mio filtro?

UPDATE:

Ho ottenuto questo lavoro specificando l'URL per consentire all'interno del filtro stesso. Questo funziona bene per me, ma se c'è un modo migliore/più "elastico" per farlo, sarei felice di sentirlo.

risposta

2

Devi fare questo all'interno del xml configurazione attuale (stesso luogo si ha la Qualcosa <custom-filter ref="requireVerificationFilter" after="LAST" />.

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

lungo queste linee, è possibile specificare un elenco dei filtri che si desidera eseguire ed escludere quelli che non (e "nessuno" significa nessuno) Non è necessario aggiungere il tuo filtro al web.xml - solo in linea con la catena di filtri di Spring Security

+0

Grazie! Ho dei tag intercetta-url nella mia configurazione di sicurezza, ma non sapevo che potessi specificare i filtri lì. – outis

+5

Ma [Spring Security Reference Documentation] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents) dice che: attributo 'filters'" Può solo prendere il valore "none" ". – btpka3

3

Per questo deve utilizzare org.springframework.security.web.FilterChainProxy. contiene solo 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

Questa soluzione ha funzionato per me, grazie! –

Problemi correlati