Devo disattivare le intestazioni di controllo della cache nel mio conf.La disattivazione delle intestazioni Spring Security non funziona
Secondo la documentazione di un semplice http.headers.disable()
dovrebbe farlo, ma io continuo a vedere le intestazioni
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Expires:0
Pragma:no-cache
nelle risposte.
Il mio attuale configurazione di sicurezza è:
http.antMatcher("/myPath/**") // "myPath" is of course not the real path
.headers().disable()
.authorizeRequests()
// ... abbreviated
.anyRequest().authenticated();
Le cose che ho provato finora:
application.properties
ho aggiunto la linea security.headers.cache=false
, ma che non ha fatto differenza.
Usando un filtro
ho provato il seguente filtro:
@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);
}
});
}
Dopo aver aggiunto la registrazione ho visto che questo filtro scrive solo il X-XSS-Protection
intestazione, tutte le intestazioni di cache sono scritti da qualche parte più avanti e questo il filtro non ha accesso a "sostituiscile". Ciò accade anche se aggiungo questo filtro nell'ultima posizione della catena del filtro di sicurezza.
L'utilizzo di un intercettore
ho provato la seguente intercettore:
@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", "");
}
Questo (piuttosto prevedibile) appena aggiunto le intestazioni, il che significa che l'originale no-cache
intestazioni appaiono ancora in aggiunta a quelli aggiunti dall'intercettore.
Sono qui che il mio spirito finirà. Come faccio a eliminare l'intestazione del controllo della cache impostata dalla sicurezza Spring?
L'assunzione è errata.Non ho più configurazioni di sicurezza per i percorsi secondari di una configurazione già esistente. Ho altre configurazioni di sicurezza per altri percorsi (non in alcun modo relativi a "/ mypath"), ma quelli non dovrebbero essere davvero una preoccupazione, non ho bisogno di disabilitare le intestazioni lì. – j0ntech