I need to disable the cache control headers in my Spring Security conf.
According to the documentation a simple http.headers.disable()
should do it, but I still see the
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Expires:0
Pragma:no-cache
headers in responses.
My current security config is:
http.antMatcher("/myPath/**") // "myPath" is of course not the real path
.headers().disable()
.authorizeRequests()
// ... abbreviated
.anyRequest().authenticated();
Things I've tried so far:
application.properties
I added the security.headers.cache=false
line, but that made no difference.
Using a filter
I tried the following filter:
@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);
}
});
}
After adding logging I saw that this filter only writes the X-XSS-Protection
header, all the cache headers are written somewhere later and this filter doesn't have access to "override" them. This happens even if I add this filter at the last position of the security filter chain.
Using an interceptor
I tried the following interceptor:
@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", "");
}
This (quite predictably) just added the headers, meaning that the original no-cache
headers still appear in addition to the ones added by the interceptor.
I'm at my wits end here. How do I get rid of the cache control header set by Spring security?