Adición de encabezados HTTP en un método postHandle de Spring Interceptor

StackOverflow https://stackoverflow.com/questions/246762

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo un Interceptor Spring que intenta agregar un encabezado HTTP en el método postHandle ().

public void postHandle(HttpServletRequest req, HttpServletResponse resp, 
             Object obj1, ModelAndView mv)
        throws Exception {
        response.setHeader("SomeHeaderSet", "set");
        response.addHeader("SomeHeaderAdd", "added");
    }
}

Sin embargo, ninguno de los encabezados se agrega con setHeader () o addHeader ().

¿Es esto incluso válido para hacer en el interceptor? Pensé que no, pero no funciona.

Saludos, Dustin

¿Fue útil?

Solución 2

Bueno, lo descubrí ... Kinda ...

Resulta que, el mismo problema con Jetty y Tomcat (se calculó que PUEDE ser un problema de contenedor). Entonces ...

Se depuró para garantizar que el objeto de respuesta contenía el valor de encabezado correcto hasta que Spring regresó al contenedor. Resultado: la instancia de HttpServletResponse aún tenía el valor de encabezado correcto.

Encontré en mi código que estaba invocando response.setContentLength () ANTES de que estuviera haciendo algo con los encabezados. Si lo comento, todo funciona bien.

Entonces, el misterio restante es, ¿por qué el hecho de llamar a response.setContentLength () bloquea las cosas y no permite que se modifiquen los encabezados? No pensé que el cuerpo de contenido tuviera nada que ver con los otros encabezados.

Otros consejos

¿Ha intentado configurar los encabezados en el método preHandle? Si eso no funciona, intente escribir un filtro para el contenedor y establezca los encabezados allí.

Tuve un problema similar, funciona cuando tengo lo siguiente en el web.xml (no he descubierto por qué)

<filter>
  <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>etagFilter</filter-name>
  <servlet-name>myServlet</servlet-name>
</filter-mapping>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top