java 覆盖X-Powered-By HTTP标头

gcmastyq  于 2023-03-16  发布在  Java
关注(0)|答案(3)|浏览(215)

根据一些安全要求,必须将X-Powered-By头设置为空字符串。我一直试图在过滤器中设置头,但当我在Firebug中查看头时,我看到我的过滤器设置的自定义头值是由JSF/ 1.2附加的。
Filter是请求链中的第一个,也是响应链中的最后一个。下面是我用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是否再次设置此头?
如何将此值覆盖为我的自定义值?

8yoxcaq7

8yoxcaq71#

您在应用程序的其余部分有时间处理响应之前设置了响应标头。您应该在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正在执行的操作或 Package HttpServletResponse
如果头是由碧玉引擎添加的,您可以检查它是否为configured that way$CATALINA_BASE/conf/web.xml中的Jasperservlet可能将init-paramxpoweredBy设置为true

brccelvz

brccelvz2#

在堆栈溢出上也有类似的问题JSF, override HTTP headers
简而言之:您需要编写一个PhaseListener。在JSF servlet之前似乎调用了一个过滤器,因此当您试图覆盖响应头时,您的头将被覆盖。

y53ybaqx

y53ybaqx3#

我们可以在Wildfly和Weblogic服务器中删除禁用X Powered By标头。

  • 对于Wildfly服务器=〉*

导航到路径配置⇒子系统⇒Web=〉设置⇒Servlet容器⇒默认=〉JSP
我们可以看到X Powered By标头配置,同样我们可以启用或禁用。
[Wildfly X由针座配置供电] https://i.stack.imgur.com/gs4TT.png

  • 对于Weblogic服务器=〉*

导航到路径主页=〉域分区概要=〉部署概要=〉域分区概要=〉分区概要工作管理器=〉base_domain=〉配置=〉Web应用程序
我们可以看到X Powered By标头配置,同样我们可以使用值启用或禁用。
[Weblogic X Powered By标头配置] https://i.stack.imgur.com/rFvrM.png

相关问题