我已经搜索并看到了这个问题的几个帖子,但没有找到答案它是如何可能的。
我想要做的是在过滤器链之后添加标题
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但它不适合我,任何人都可以帮助我。
答案 0 :(得分:4)
在提交响应之后,您无法添加标头(好吧,您可以但它不会产生任何影响),因为此时HTTP标头已全部写入客户端。 / p>
您有三种选择。
答案 1 :(得分:0)
您可以在do过滤器后添加标头,但这不能保证它始终有效。一种不起作用的情况是, 当任何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).`
注意:还可以有其他情况。