2011-08-22 13 views
6

Mam aplikację internetową z ekranem logowania, której kopie zapasowe są tworzone przez filtr uwierzytelniania.Filtr serwletów - Nie stosuj filtru do konkretnego.

Mam następujących w moim web.xml

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

I mam następujący mapping -

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

Ale teraz chcę dodać wyjątek, jeśli dla danego serwletu /web/MyNewServlet, ja chcesz ominąć filtr uwierzytelniania. Jak możemy to zrobić?

Odpowiedz

5

Istnieją dwa sposoby, dzięki którym można to zrobić:

  • przemapować /* wzór do innego wzorca jak /subdir/*, dzięki czemu unika się AuthenticationFilter przed przyłożony /web/MyNewServlet. Jest to uciążliwy proces, ponieważ możesz mieć kilka adresów URL w swojej aplikacji internetowej, które teraz wymagają ponownego mapowania. Proponuję to zrobić na wczesnym etapie rozwoju lub gdy nie masz zbyt wielu adresów URL do zmiany.
  • Dołącz regułę wykluczenia programowo do implementacji filtra. Będziesz musiał użyć metody HttpServletRequest.getServletPath i podobnych metod, aby sprawdzić, czy fragment adresu URL zawiera /web/MyNewServlet, a następnie połączyć filtr do następnego filtru lub serwletu, zamiast wykonywać treść filtru.
4

Rozszerzanie pomysł Vineet nieznacznie, można dodać inny filtr o nazwie coś DoesNotNeedAuthenticationFilter, która biegnie przed AuthenticationFilter, i po prostu ustawia DOES_NOT_NEED_AUTHENTICATION atrybut żądania. Filtr AuthenticationFilter może następnie sprawdzić ten atrybut i przekazać wszystkie żądania, które go mają. Następnie można użyć normalnego mechanizmu mapowania filtra, aby zastosować właściwość DoesNotNeedAuthenticationFilter do odpowiednich adresów URL lub serwletów.

+0

Elegancki sposób na pomijanie filtrów, szczególnie jeśli posiadasz długi łańcuch filtrów, dzięki! – Sohail

Powiązane problemy