在chain.doFilter之后添加Response头

时间:2015-12-04 09:55:29

标签: java servlet-filters

我已经搜索并看到了关于这个问题的几个答案,但仍然不知道它是如何可能的......

我被要求在响应头中实现一个返回HTTP请求响应时间的过滤器,例如。 response-header:XX 以便通过网站分析客户端库收集。

这是我的代码:

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse)response;
      long startTime = System.nanoTime();
      chain.doFilter(request, response);
      long endTime = System.nanoTime();
      httpResp.addHeader("response-time",endTime-startTime);
    }

我尝试使用HttpServletResponseWrapper

我设法使用OutputStream修改响应,但没有成功设置响应头。

谢谢,杰

1 个答案:

答案 0 :(得分:0)

扩展包装器实用程序类,如HttpServletResponseWrapper(使用自定义输出流),并将其传递给链式doFilter()方法。如果你不这样做,在链doFilter()返回后,原始(未包装)响应将消失,你将没有机会修改它。

您可以在此处找到一个示例:Looking for an example for inserting content into the response using a servlet filter