Servlets 在doFilter之后添加响应头
我已经搜索并看到了一些关于这个问题的帖子,但是没有找到答案 我要做的是在过滤器链之后添加标题Servlets 在doFilter之后添加响应头,servlets,http-headers,servlet-filters,Servlets,Http Headers,Servlet Filters,我已经搜索并看到了一些关于这个问题的帖子,但是没有找到答案 我要做的是在过滤器链之后添加标题 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResp = (HttpServletResponse) response; try { Http
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse) response;
try {
HttpServletResponseWrapper bufferedResponse = new HttpServletResponseWrapper (httpResp);
chain.doFilter(request, bufferedResponse);
} finally {
// header added at this line is not actually being added.
bufferedResponse.setHeader("ADD A HEADER: ", "HEADER");
}
}
多篇文章都在讨论使用HttpServletResponseWrapper是可能的,但它对我不起作用,有人能帮我吗。在提交响应后,您不能添加头(当然,您可以,但不会有任何效果),因为此时HTTP头都已写入客户端
你有三个选择
您可以在do filter之后添加标题,但这不能保证它始终有效。有一种情况是它不起作用, 当任何servlet/筛选器调用response.sendRedirect时
`Filter A - pre work
doFilter ------> Servlet A - do some work
invoke response.sendRedirect
post work - add/Set Headers (These will get ignored).`
注意:可能还有其他情况。是的,我正在尝试实施您建议的选项2或3。但还没有成功。你有这方面的示例代码吗。[链接]使用以下方法缓冲响应。我正在使用响应头,但如何添加headerApproach 3只有在没有响应体的情况下才有效。如果有一个响应机构,它不起作用。你可以参考这个答案,它对我起作用-