Мне нужно отключить заголовки управления кэшем в моем Spring безопасности conf.
В соответствии с документацией простой http.headers.disable()
должен это сделать, но я все еще вижу
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Expires:0
Pragma:no-cache
в ответах.
Мой текущий конфигуратор безопасности:
http.antMatcher("/myPath/**") // "myPath" is of course not the real path
.headers().disable()
.authorizeRequests()
// ... abbreviated
.anyRequest().authenticated();
Вещи, которые я пробовал до сих пор:
application.properties
Я добавил строку security.headers.cache=false
, но это не имело значения.
Использование фильтра
Я попробовал следующий фильтр:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
@Override
public void setHeader(String name, String value) {
if (name.equalsIgnoreCase("Cache-Control")) {
value = "";
} else if (name.equalsIgnoreCase("Expires")) {
value = "";
} else if (name.equalsIgnoreCase("Pragma")) {
value = "";
}
super.setHeader(name, value);
}
});
}
После добавления журнала я увидел, что этот фильтр записывает только заголовок X-XSS-Protection
, все заголовки кеша записываются где-то позже, и этот фильтр не имеет доступа к "переопределению" их. Это происходит, даже если я добавлю этот фильтр в последнее положение цепочки фильтров безопасности.
Использование перехватчика
Я попробовал следующий перехватчик:
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
String requestUri = request.getRequestURI();
response.setHeader("Cache-Control", "max-age=3600");
response.setHeader("Expires", "3600");
response.setHeader("Pragma", "");
}
Это (вполне предсказуемо) просто добавило заголовки, что означает, что исходные заголовки no-cache
все еще появляются в дополнение к тем, которые добавлены перехватчиком.
Я здесь. Как избавиться от заголовка управления кэшем, установленного с помощью Spring безопасности?