Как добавить заголовок Cache-Control в статический ресурс при весенней загрузке?
как я могу добавить Cache-Control 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
            5 ответов
на документация, of ResourceHandlerRegistry. Это довольно просто. (У меня нет кода, связанного с этим прямо сейчас.) 
в том месте, где вы настраиваете свои статические ресурсы, просто добавьте addResourceHandler метод, он возвращает ResourceHandlerRegistration "объект". 
здесь вы можете использовать setCacheControl метод. Что вам нужно сделать, это настроить и установить CacheControl obejct.
это с весны 4.2, иначе вам придется сделать это, как показано ниже.
@Configuration
@EnableWebMvc
@ComponentScan("my.packages.here")
public class WebConfig extends WebMvcConfigurerAdapter {
   @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").setCachePeriod(0);
    }
}
это происходит из-за Безопасности Spring: он перезаписывает все заголовки кэша, чтобы полностью отключить кэширование. Поэтому нам нужно сделать две вещи:--4-->
- отключить spring security для статических ресурсов
 - включить статическую обработку кэша ресурсов
 
в текущей версии Spring Boot мы можем изменить это поведение в приложении.конфигурация свойств.
отключить spring security для некоторых ресурсов:
# Comma-separated list of paths to exclude from the default secured 
security.ignored=/myAssets/**
включить отправку кэша заголовки для статических ресурсов:
# Enable HTML5 application cache manifest rewriting.
spring.resources.chain.html-application-cache=true
# Enable the Spring Resource Handling chain. Disabled by default unless at least one strategy has been enabled.
spring.resources.chain.enabled=true
# Enable the content Version Strategy.
spring.resources.chain.strategy.content.enabled=true 
# Comma-separated list of patterns to apply to the Version Strategy.
spring.resources.chain.strategy.content.paths=/** 
# Locations of static resources.
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
вот и все. Теперь Spring проверит, были ли изменены ваши статические файлы, и может отправлять более умные ответы (If-Modiffied-Since и другие) и переписывать appcache.
кроме того, если есть причины не использовать контент-версию для некоторых ресурсов - вы можете использовать альтернативную стратегию FixedVersion и явно установить версию в своей конфигурации:
#Enable the fixed Version Strategy.
spring.resources.chain.strategy.fixed.enabled=false 
# Comma-separated list of patterns to apply to the Version Strategy.
spring.resources.chain.strategy.fixed.paths= 
# Version string to use for the Version Strategy.
spring.resources.chain.strategy.fixed.version= 
Maleenc, что ответ правильный. Однако в связи с этим возникает одна проблема.
следующий код предоставит правильный заголовок управления кэшем в первом запросе, но не будущий запрос, который возвращает 304 (не измененный), вернет заголовок управления кэшем по умолчанию, установленный spring security. {код}
public void addResourceHandlers(ResourceHandlerRegistry registry) {         
    registry.addResourceHandler("/resources/**").setCacheControl(CacheControl.maxAge(10, TimeUnit.SECONDS));
}
Я поднял этот вопрос перед весенней командой, см. https://jira.spring.io/browse/SPR-15133. Здесь был ответ: "Теперь вы не должны отключать заголовки управления кэшем безопасности для всего вашего приложения; правильный способ отключить их для определенного пути (обработка ресурсов, здесь) объясняется в комментарии к этой проблеме, см. раздел"обходной путь"."
используя spring boot 1.3.3, у меня был ответ 404, используя ответ maleenc. Я мог бы исправить это, добавив местоположение ресурса:
@Configuration
public class HttpClientConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS))
                .addResourceLocations("/");
    }
}
свойства, которые управляют заголовками кэша по умолчанию для ресурсов:
spring.resources.cache.cachecontrol.max-age: 3600
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html