servlets http-headers servlet-filters jboss-eap-6 login-page

servlets - El filtro de servlet no se aplica a la página de inicio de sesión administrado del contenedor



http-headers servlet-filters (1)

Estoy usando un Filter para insertar encabezados anti-clickjacking en todas mis páginas, esto funciona correctamente, excepto en la página de inicio de sesión administrada del contenedor JBoss EAP 6.3, que es una de las más importantes para tenerla.

El filtro no se llama en absoluto con la página de inicio de sesión, que se sirve fuera de http://localhost/Application/ . Las asignaciones de filtro que he intentado incluir

<filter> <filter-name>InsertXFrameOptions</filter-name> <filter-class>com.filter.InsertXFrameOptionsFilter</filter-class> </filter> <filter-mapping> <filter-name>InsertXFrameOptions</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>InsertXFrameOptions</filter-name> <url-pattern>*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>InsertXFrameOptions</filter-name> <url-pattern>/</url-pattern> </filter-mapping>

Sin embargo, nada de suerte: ¿cómo se correlaciona un filtro para que se aplique a la página de inicio de sesión administrada del contenedor?


Los filtros no se j_security_check solicitudes j_security_check . El contenedor los maneja internamente antes de que se apliquen los filtros de la aplicación web. Por lo tanto, debe dirigirse a una solución específica de contenedor para enganchar la solicitud / respuesta.

JBoss 6.x / 7.x (y todos los demás contenedores basados ​​en Tomcat) ofrecen válvulas para esto. Básicamente, reemplace su Filter por una Valve que se ve a continuación :

import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; public class InsertXFrameOptionsValve extends ValveBase { @Override public void invoke(Request request, Response response) throws IOException, ServletException { response.addHeader("X-Frame-Options", "SAMEORIGIN"); getNext().invoke(request, response); } }

Para que se ejecute, regístrelo en jboss-web.xml como se muestra a continuación:

<valve> <class-name>com.example.InsertXFrameOptionsValve</class-name> </valve>