Search code examples
springheaderinterceptor

Add response header in HandlerInterceptorAdapter


I am adding a header to the response inside HandlerInterceptorAdapter. However it seems that the response header cannot be modified in the postHandle method.

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
    }
}

How to add a header to the response ?

Popular solution is to use OncePerRequestFilter ( Set response header in Spring Boot ). Isn't there any other way ?


Solution

  • The problem with adding headers in the postHandle method is that the response may already be (partially) send. When that is the case you cannot add/change headers anymore. You need to set the headers before anything is sent to the client.

    This you can do in the preHandle method or more generic a servlet filter before you call filterchain.doFilter. Doing it after the aforementioned call you might get the same issue that a response has already (partially) been sent.