在 HandlerInterceptorAdapter 中添加响应 header

Add response header in HandlerInterceptorAdapter

我在 HandlerInterceptorAdapter 内的响应中添加 header。 但是,似乎无法在 postHandle 方法中修改响应 header。

public class CredentialInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
      return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView) {
            String value = "...";
            response.addHeader("header_name",value ); // doesn't work
    }
}

如何在响应中添加 header?

流行的解决方案是使用 OncePerRequestFilter ( )。没有别的办法吗?

postHandle 方法中添加 headers 的问题是响应可能已经(部分)发送。在这种情况下,您不能再 add/change headers 了。在向客户端发送任何内容之前,您需要设置 headers。

您可以在调用 filterchain.doFilter 之前在 preHandle 方法或更通用的 servlet 过滤器中执行此操作。在上述调用之后执行此操作可能会遇到相同的问题,即已经(部分)发送了响应。