小编典典

如何在Spring Boot中将Cache-Control标头添加到静态资源中?

spring-boot

如何Cache-Control在Spring Boot中为静态资源添加HTTP标头?

尝试在应用程序中使用过滤器组件,该组件可以正确写入标头,但Cache-Control标头会被覆盖。

@Component
public class CacheBustingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
                                              throws IOException, ServletException {

        HttpServletResponse httpResp = (HttpServletResponse) resp;
        httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        httpResp.setHeader("This-Header-Is-Set", "no-cache, no-store, must-revalidate");
        httpResp.setHeader("Expires", "0");

        chain.doFilter(req, resp);
    }

我在浏览器中得到的是:

Cache-Control:no-store
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0

我想要的是:

Cache-Control:no-cache, no-store, must-revalidate
This-Header-Is-Set:no-cache, no-store, must-revalidate
Expires:0

阅读 1007

收藏
2020-05-30

共1个答案

小编典典

根据文档ResourceHandlerRegistry。这很容易。(我现在没有与此相关的代码。)

在您配置静态资源的地方,只需添加addResourceHandler方法,它将返回ResourceHandlerRegistration对象。

在那里您可以使用setCacheControl方法。您要做的是配置和设置CacheControl对象。

这是从4.2版本开始 ,否则您将需要像下面这样。

@Configuration
@EnableWebMvc
@ComponentScan("my.packages.here")
public class WebConfig extends WebMvcConfigurerAdapter {


   @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").setCachePeriod(0);
    }

}
2020-05-30