根据某些安全要求,必须将 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/