2011-08-22 26 views
6

Ho un'applicazione Web con schermata di accesso con il backup di un filtro di autenticazione.Filtro servlet - Non applicare il filtro a uno specifico

Ho la seguente nel mio web.xml

<filter> 
    <filter-name>AuthenticationFilter</filter-name> 
    <display-name>AuthenticationFilter</display-name> 
    <filter-class>com.mycompany.secutity.AuthenticationFilter</filter-class> 
</filter> 

E ho la seguente mappatura -

<filter-mapping> 
    <filter-name>AuthenticationFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Ma ora voglio aggiungere un'eccezione in cui per una specifica servlet /web/MyNewServlet, ho vuoi bypassare il filtro di autenticazione. Come possiamo farlo?

risposta

5

Ci sono due modi in cui si potrebbe fare così:

  • rimappare il modello /* ad un altro modello come /subdir/*, e quindi evitare l'AuthenticationFilter venga applicato contro /web/MyNewServlet. Si tratta di un processo ingombrante in quanto potresti avere diversi URL nella tua applicazione web che ora devono essere rimappati. Ti suggerirei di farlo presto nel tuo sviluppo o quando non hai troppi URL da rimappare.
  • Includere una regola di esclusione in modo programmatico all'interno dell'implementazione del filtro. Sarà necessario utilizzare HttpServletRequest.getServletPath e metodi simili per verificare se il frammento di URL contiene /web/MyNewServlet e quindi concatenare il filtro al filtro o al servlet successivo, anziché eseguire il corpo del filtro.
4

Estendendo l'idea di Vineet un po ', si potrebbe aggiungere un altro filtro, chiamato qualcosa come DoesNotNeedAuthenticationFilter, che corre davanti al AuthenticationFilter, e solo imposta un DOES_NOT_NEED_AUTHENTICATION attributo sulla richiesta. AuthenticationFilter può quindi verificare l'attributo e passare eventuali richieste che lo hanno. È quindi possibile utilizzare il normale meccanismo di mappatura dei filtri per applicare DoesNotNeedAuthenticationFilter agli URL o ai servlet appropriati.

+0

Elegante modo di saltare i filtri soprattutto se si dispone di una lunga catena di filtri, grazie! – Sohail

Problemi correlati