在 doFilter 之后添加响应头

Kis*_*ore 5 servlets http-headers servlet-filters

我已经搜索并看到了有关此问题的几个帖子,但没有找到答案如何可能。

我想要做的是在过滤器链之后添加标头,

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");
}                                     
}
Run Code Online (Sandbox Code Playgroud)

多个帖子都在谈论使用 HttpServletResponseWrapper 是可能的,但它对我不起作用,任何人都可以帮助我。

Mar*_*mas 5

在提交响应之后,您无法添加标头(当然可以,但不会有任何效果),因为此时 HTTP 标头已全部写入客户端。

你有三个选择。

  1. 在调用 doFilter() 之前写下标题
  2. 确保(大缓冲区,小响应,不调用flush()等)在尝试添加标头之前未提交响应。
  3. 在 do 过滤器方法之前包装响应,然后在包装器中缓冲整个响应正文,之后添加标头,然后从缓冲区中写出响应正文。