servlets - example - javax.servlet.filter jar
Dando mĂșltiples patrones de URL al filtro de servlet (2)
En caso de que esté utilizando el método de anotación para la definición del filtro (en lugar de definirlos en el web.xml
), puede hacerlo simplemente colocando una matriz de asignaciones en la anotación @WebFilter
:
/**
* Filter implementation class LoginFilter
*/
@WebFilter(urlPatterns = { "/faces/Html/Employee","/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginFilter implements Filter {
...
Y solo como un FYI, esto mismo funciona para los servlets que usan la anotación de servlet también:
/**
* Servlet implementation class LoginServlet
*/
@WebServlet({"/faces/Html/Employee", "/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginServlet extends HttpServlet {
...
Estoy usando un filtro de servlet en mi aplicación JSF. Tengo tres grupos de páginas web en mi aplicación, y quiero verificar la Autenticación de estas páginas en mi Servlet Filter:
mis carpetas
/Admin/ *.xhtml
/Supervisor/*.xhtml
/Employee/*.xhtml
y estoy escribiendo web.xml
como
<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>
pero solicitudes como
http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml
no entran en el filtro
Tengo que proporcionar seguridad a estas 3 carpetas.
Cómo resolver este problema ?
Si un patrón de URL comienza con /
, entonces es relativo a la raíz de contexto. El patrón /Admin/*
URL solo coincidiría con las páginas en http://localhost:8080/EMS2/Admin/*
(suponiendo que /EMS2
es la ruta de contexto), pero las tiene realmente en http://localhost:8080/EMS2/faces/Html/Admin/*
, por lo que su patrón de URL nunca coincide.
Debes ponerle un prefijo a tus patrones de URL con /faces/Html
, así:
<url-pattern>/faces/Html/Admin/*</url-pattern>
También puede, como alternativa, reconfigurar la estructura / configuración de su proyecto web para que pueda deshacerse de la ruta /faces/Html
en las URL para poder abrir la página, por ejemplo http://localhost:8080/EMS2/Admin/Upload.xhtml
.
Su sintaxis de mapeo de filtros está bien. Sin embargo, una manera más simple de especificar múltiples patrones de URL es simplemente usar solo un <filter-mapping>
con múltiples entradas de <url-pattern>
:
<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>