【发布时间】:2012-09-23 01:03:53
【问题描述】:
我希望在 doFilter() 函数运行完成后添加一个 HTTP 标头。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse) response;
try {
chain.doFilter(request, httpResp);
} finally {
httpResp.setHeader("ADD A HEADER: ", "HEADER");
}
}
似乎doFilter 刷新了响应。
更新:
谢谢。查看 IgorMadjeric 和 richardtz 的答案后,我决定尝试响应包装器:
这是包装器:
public class BufferedHttpServletResponse extends HttpServletResponseWrapper {
public BufferedHttpServletResponse(HttpServletResponse response) {
super(response);
}
public void flushBuffer() {
System.out.println("flush");
}
}
这是修改后的代码:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse) response;
try {
BufferedHttpServletResponse bufferedResponse = new BufferedHttpServletResponse(httpResp);
chain.doFilter(request, bufferedResponse);
} finally {
bufferedResponse.setHeader("ADD A HEADER: ", "HEADER");
}
}
还是不行。我是不是做错了什么?
【问题讨论】:
-
为什么要在
doFilter()之后做? -
我想添加性能数据,这似乎是正确的选择。
-
我在添加性能信息时遇到了类似的问题。它可能取决于容器何时提交响应,您可能无法控制它。我最终所做的是将 html 注释中的信息(这是我生成的 html)添加到响应的正文中。此外,性能信息仅在请求中包含某些参数时才会生成。
-
@IdoBarash 你得到答案了吗?如果可以,可以贴在这里吗?
-
你可以参考这个答案-stackoverflow.com/questions/32829124/…