簡體   English   中英

Spring 啟動 web 應用程序沒有緩存控制 header

[英]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");

更多請看這里: https://www.baeldung.com/spring-response-header

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM