Servlet-Filter - Dont filter anwenden, um eine spezifische
Ich habe eine web-Anwendung mit login-Bildschirm gesichert durch eine Authentifizierung Filter.
Habe ich Folgendes in meiner web.xml
<filter>
<filter-name>AuthenticationFilter</filter-name>
<display-name>AuthenticationFilter</display-name>
<filter-class>com.mycompany.secutity.AuthenticationFilter</filter-class>
</filter>
Und ich habe die folgenden mapping -
<filter-mapping>
<filter-name>AuthenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Aber jetzt möchte ich hinzufügen, dass eine Ausnahme, wo für ein bestimmtes servlet /web/MyNewServlet
ich umgehen möchten, die authenctication filter. Wie können wir dies tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten, in denen Sie dies tun könnte:
/*
Muster zu einem anderen Muster wie/subdir/*
, und damit der AuthenticationFilter angewendet wird gegen/web/MyNewServlet
. Dies ist ein umständliches Verfahren, wie Sie vielleicht mehrere URLs in Ihre web-Anwendung, die müssen nun neu zugeordnet werden. Ich würde vorschlagen, tun dies frühzeitig in Ihrer Entwicklung, oder, wenn Sie nicht über zu viele URLs zuordnen.HttpServletRequest.getServletPath
und ähnliche Methoden um zu überprüfen, ob die URL-fragment enthält/web/MyNewServlet
, und dann-chain-filter, um den nächsten filter bzw. das servlet nicht ausgeführt werden, sondern der Körper des filters.Erweitern Vineet Idee leicht, man könnte hinzufügen weiterer filter, der heißt so etwas wie DoesNotNeedAuthenticationFilter, die ausgeführt wird, bevor der AuthenticationFilter, und stellt nur ein Attribut DOES_NOT_NEED_AUTHENTICATION auf die Anfrage. Der AuthenticationFilter anschließend können Sie für das Attribut, und übergeben Sie alle Anfragen, die haben es. Sie können dann die normalen filter-mapping-Mechanismus anwenden, den DoesNotNeedAuthenticationFilter, um die entsprechenden URLs oder servlets.