Добавление HTTP-заголовков в метод postHandle Spring Interceptor
-
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>