wake-up-neo.net

Geben Sie dem Servlet-Filter mehrere URL-Muster

Ich verwende einen Servlet-Filter in meiner JSF-Anwendung. Ich habe drei Gruppen von Webseiten in meiner Anwendung und ich möchte die Authentifizierung für diese Seiten in meinem Servlet-Filter überprüfen:

meine Ordner

/Admin/ *.xhtml

/Supervisor/*.xhtml
/Employee/*.xhtml

und ich schreibe web.xml mögen

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.ems.admin.servlet.LoginFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Employee/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Supervisor/*</url-pattern>
</filter-mapping>

aber bitte gerne

http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml

treten nicht in Filter ein.

Ich muss diesen 3 Ordnern Sicherheit geben.

Wie kann man dieses Problem lösen?

69
Raju Boddupalli

Wenn ein URL-Muster mit / Beginnt, ist es relativ zum Kontextstamm. Das URL-Muster /Admin/* Würde nur mit Seiten in http://localhost:8080/EMS2/Admin/* Übereinstimmen (vorausgesetzt, /EMS2 Ist der Kontextpfad), aber Sie haben sie tatsächlich in http://localhost:8080/EMS2/faces/Html/Admin/* URL-Muster stimmt nie überein.

Sie müssen Ihren URL-Mustern auch das Präfix /faces/Html Voranstellen:

<url-pattern>/faces/Html/Admin/*</url-pattern>

Sie können alternativ auch einfach die Struktur/Konfiguration Ihres Webprojekts neu konfigurieren, sodass Sie den Pfad /faces/Html In den URLs entfernen können, sodass Sie die Seite nur mit http://localhost:8080/EMS2/Admin/Upload.xhtml Öffnen können.

Ihre Filterzuordnungssyntax ist in Ordnung. Eine einfachere Möglichkeit, mehrere URL-Muster anzugeben, besteht darin, nur einen <filter-mapping> Mit mehreren <url-pattern> - Einträgen zu verwenden:

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/faces/Html/Employee/*</url-pattern>
    <url-pattern>/faces/Html/Admin/*</url-pattern>
    <url-pattern>/faces/Html/Supervisor/*</url-pattern>
</filter-mapping>
122
BalusC

Falls Sie die Anmerkungsmethode für die Filterdefinition verwenden (im Gegensatz zur Definition in web.xml) können Sie dies tun, indem Sie einfach eine Reihe von Zuordnungen in das @WebFilter Anmerkung:

/**
 * Filter implementation class LoginFilter
 */
@WebFilter(urlPatterns = { "/faces/Html/Employee","/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginFilter implements Filter {
    ...

Und genau wie ein FYI funktioniert dies auch für Servlets, die die Servlet-Annotation verwenden:

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet({"/faces/Html/Employee", "/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginServlet extends HttpServlet {
    ...
15
Michael Plautz