3

我正在使用 aFilter在我的所有页面中插入反点击劫持标题 - 这可以正常工作,除了 JBoss EAP 6.3 容器管理的登录页面,这是拥有它的更重要的页面之一。

登录页面根本不调用过滤器,登录页面由http://localhost/Application/. 我尝试过的过滤器映射包括

<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>

不过一点运气都没有——你如何映射一个过滤器,使它适用于容器管理的登录页面?

4

1 回答 1

4

过滤器不会启动j_security_check请求。它们在 Web 应用程序的过滤器被命中之前由容器内部处理。因此,您需要使用特定于容器的解决方案来挂钩请求/响应。

JBoss 6.x/7.x(以及所有其他基于 Tomcat 的容器)为此提供了Valves。基本上,将您Filter的替换Valve如下所示

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);
    }

}

为了让它运行,像下面这样注册它:jboss-web.xml

<valve>
    <class-name>com.example.InsertXFrameOptionsValve</class-name>
</valve>
于 2015-10-21T08:23:51.913 回答