java - 在 chain.doFilter 之后添加响应头

标签 java servlet-filters

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

我被要求实现一个过滤器,该过滤器在响应 header 中返回 HTTP 请求的响应时间,例如。响应 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 修改响应,但没有成功设置响应 header 。

谢谢杰伊

最佳答案

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

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

关于java - 在 chain.doFilter 之后添加响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085468/

相关文章:

Java程序以交互方式显示几何图形中的形状数量

java - 检查数组是否相等

Java web tomcat 编码过滤器不起作用

java - 是否可以使用 Sitemesh 直接在 JSP 中定义装饰器?

JavaServlet : pass a request back to default processing

servlets - 在 Compojure 中使用 javax.servlet.Filter

java - JLabel 组件中的几个图像快照

java - JOOQ Field 类仅限于记录(无类型)

java - 如何通过 setProperty 通过代理使用 HttpsURLConnection?

jsf - 正确设置 HTTP header 以强制缓存 JS、CSS 和 PNG 文件