Добавление HTTP-заголовков в метод postHandle Spring Interceptor

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

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть перехватчик Spring, который пытается добавить HTTP-заголовок в метод postHandle().

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

Однако ни один заголовок не добавляется ни с помощью setHeader(), ни с помощью AddHeader().

Допустимо ли это вообще делать в перехватчике?Я предполагал, что так и будет, но это не работает.

С уважением, Дастин

Это было полезно?

Решение 2

Ну, я понял это...Вроде того...

Оказывается, та же проблема с Jetty и Tomcat (подумал, МОЖЕТ быть, это проблема с контейнером).Итак...

Отлажено, чтобы гарантировать, что объект ответа содержал правильное значение заголовка вплоть до тех пор, пока Spring не вернется обратно в контейнер.Результат:Экземпляр HttpServletResponse по-прежнему имел правильное значение заголовка.

Я нашел в своем коде, который я вызывал response.setContentLength() ДО того, как я начал что-то делать с заголовками.Если я это прокомментирую, все будет работать нормально.

Итак, остающаяся загадкой заключается в том, почему вызывающий response.setContentLength() заблокировать все и не разрешать изменять какие-либо заголовки?Я не думал, что тело содержимого имеет какое-либо отношение к другим заголовкам.

Другие советы

Вы пробовали устанавливать заголовки в методе предварительной обработки?Если это не сработает, попробуйте написать фильтр для контейнера и вместо этого установите туда заголовки.

У меня была похожая проблема, она работает, когда у меня есть следующее в web.xml (не понял, почему)

<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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top