java - 覆盖 X-Powered-By HTTP header

标签 java jakarta-ee tomcat servlets filter

根据某些安全要求,必须将 X-Powered-By header 设置为空字符串。我一直在尝试在过滤器中设置 header ,但是当我在 Firebug 中查看 header 时,我发现我的过滤器设置的自定义 header 值由 JSF/1.2 附加。

过滤器是请求链中的第一个,隐式地是响应链中的最后一个。 下面是我在 doFilter 方法中编写的示例代码。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
    // App specific logic...
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    httpResponse.setHeader("X-Powered-By","");
    chain.doFilter(request, response);
}

我正在使用 Tomcat 6。由于我的过滤器是响应链中的最后一个过滤器,因此在控件返回到 tomcat 连接器后,tomcat 是否再次设置此 header ?

如何将此值覆盖为我的自定义值?

最佳答案

您在应用程序的其余部分有时间处理响应之前设置响应 header 。您应该在 doFilter 调用之后设置它

HttpServletResponse httpResponse = (HttpServletResponse) response;
// before filters and servlets
chain.doFilter(request, response);
// after filters and servlets
httpResponse.setHeader("X-Powered-By","");

此外,确保响应 isn't committed before setting the header .您可能必须更改其他 servlet 正在执行的操作或包装 HttpServletResponse

如果 header 是由 Jasper JSP 引擎添加的,您可以检查它是否为 configured that way . $CATALINA_BASE/conf/web.xml 中的 Jasper servlet 可能将 init-param xpoweredBy 设置为 true .

关于java - 覆盖 X-Powered-By HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497479/

相关文章:

java - 在 Mongodb 中为嵌入式文档设置索引

java - 与 EJB、JPA 和 DBUnit 的集成测试

java - 什么是 Glassfish ?

angularjs - 如何在同一个域/服务器上部署 AngularJS 应用程序和 Spring Restful API 服务?

java - 为 fragment 中的启动 Activity 制作图像按钮?

找不到java android.support.v4.widget.DrawerLayout

jakarta-ee - addFieldError 的反义词是什么?

tomcat - 配置自定义 Tomcat 配置文件夹

java - 让 Tomcat 使用静态上下文重新加载 Web 应用程序

JAVA 持续时间