[英]How to add Cache-Control header to static resource in Spring Boot?
[英]Spring boot web application does not have cache-control header
我正在使用 Spring 啟動應用程序,並且需要通過禁用網頁之間的緩存來啟用安全性。 據我了解,默認情況下,Spring Security 為我們設置特定的緩存控制 header 值,無需我們進行任何配置。
但是對於我的 web 應用程序,以下響應標頭不存在。 Cache-Control"、"no-store" Pragma"、"no-cache" Expires"、"0" 我嘗試使用攔截器(實現 HandlerInterceptor)設置它們,並在 preHandle、postHandle 和 afterCompletionMethod 中添加以下代碼。
response.setHeader("Cache-Control", "no-store"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
雖然控制權來自這些方法並且設置了 header,但當我檢查網絡瀏覽器時,我看不到這些標題。
可能是什么原因?
有不同類型的設置 header。
我建議使用過濾器或配置來設置它。
配置
默認情況下 spring-boot 設置安全標頭。 使用 .defaultsDisabled() 您可以禁用它們並可以選擇性地激活想要的標頭。
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.headers()
// do not use any default headers unless explicitly listed
.defaultsDisabled()
.cacheControl();
}
}
將 header 設置為以下設置:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
有關配置的更多詳細信息,請參閱文檔。 https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/headers.html
或者,您可以使用過濾器。
篩選
@WebFilter("/filter-response-header/*")
public class AddResponseHeaderFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader(
"Cache-Control", "no-store");
httpServletResponse.setHeader(
"Pragma", "no-cache");
httpServletResponse.setHeader(
"Expires", "0");
chain.doFilter(request, response);
}
對於單個響應
HttpServlet響應:
HttpServletResponse response
response.addHeader("Cache-Control", "no-store");
response.addHeader("Pragma", "no-cache");
response.addHeader("Expires", "0");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.