2010-09-10 17 views
7

¿Cómo se puede asignar un filtro a la raíz de una URL? Estoy usando Tomcat 7.0.2 y estoy implementando una aplicación como ROOT.war. La página de bienvenida es sign_in.xhtml. Me gustaría ejecutar un filtro cada vez que el cliente envía una solicitud para la raíz del sitio (es decir, el nombre de dominio solamente) o cuando el cliente solicita sign_in.xhtml. Aquí es lo que tengo hasta ahora:Asignación de URL del filtro de servlets

<filter> 
     <filter-name>My filter</filter-name> 
     <filter-class>com.myApp.myFilter</filter-class>   
    </filter> 
    <filter-mapping> 
     <filter-name>My filter</filter-name> 
     <url-pattern>/sign_in.xhtml</url-pattern> 
    </filter-mapping> 

Las solicitudes de sign_in.xhtml directamente, invocar con éxito el filtro, pero no estoy seguro de cómo obtener las solicitudes de la raíz para invocar el filtro. De acuerdo con la especificación Servlet (versión 3,0)

<url-pattern>/</url-pattern> 

mapas al servlet por defecto, y un vacío mapas de cadena en la raíz. Aquí está la sección correspondiente de la especificación:

"La cadena vacía (" ") es un patrón de URL especial que se asigna exactamente a raíz de contexto de la aplicación , es decir, las solicitudes de la forma http://host:port//En este caso, la información de la ruta. es '/' y la ruta del servlet y el contexto es cadena vacía (""). "

Sin embargo, los dos siguientes patrones de URL hacen que Tomcat genere una excepción.

<url-pattern></url-pattern> 
<url-pattern>""</url-pattern> 

Realmente agradecería que alguien pudiera arrojar algo de luz sobre esto. Gracias.

Andrew

Respuesta

7

El <url-pattern>/</url-pattern> debe trabajar para las solicitudes en la raíz. ¿Lo intentaste?

Si su intención es más para filtrar todas las solicitudes, entonces debe usar <url-pattern>/*</url-pattern>.


actualización: Para excluir una y otra, que puso a prueba la url-pattern de / en Tomcat 7 (utilizando tanto web.xml y @WebFilter(urlPatterns={"/"})) y que de hecho no ha funcionado como se esperaba. Sin embargo, el url-pattern de / funciona como se esperaba en Tomcat 6 (Servlet 2.5) y también en Glassfish v3 (Servlet 3.0). Sospecho que hay un error en Tomcat 7, así que he informado sobre issue 49914.

+0

Gracias por mirar en este BalusC. Tengo la intención de forzar la redirección si se requiere que el usuario cambie su contraseña. Un filtro parece ser la solución adecuada. Supongo que tendré que esperar 7.0.3 o encontrar algo diferente. ¿Algunas ideas? –

+0

Un filtro que escucha '/ *' que toma medidas solo si el URI de solicitud está vacío. – BalusC

+0

Lo probaré y luego actualizaré el url-patten una vez que se solucione el error de Tomcat. –

Cuestiones relacionadas