Я только что столкнулся с той же проблемой и нашел хорошее решение, уже предоставленное фреймворком. Класс org.springframework.web.servlet.mvc.WebContentInterceptor
позволяет вам определять поведение кэширования по умолчанию, а также переопределения, специфичные для пути (с тем же поведением сопоставления пути, которое используется в других местах). Шаги для меня были:
- Убедитесь, что в моем экземпляре
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
не установлено свойство cacheSeconds.
Добавить экземпляр WebContentInterceptor
:
<mvc:interceptors>
...
<bean class="org.springframework.web.servlet.mvc.WebContentInterceptor" p:cacheSeconds="0" p:alwaysUseFullPath="true" >
<property name="cacheMappings">
<props>
<!-- cache for one month -->
<prop key="/cache/me/**">2592000</prop>
<!-- don't set cache headers -->
<prop key="/cache/agnostic/**">-1</prop>
</props>
</property>
</bean>
...
</mvc:interceptors>
После этих изменений ответы в / foo включали заголовки для предотвращения кэширования, ответы в / cache / me включали заголовки для стимулирования кэширования, а ответы в / cache / agnostic не включали заголовки, связанные с кэшем.
При использовании чистой конфигурации Java:
@EnableWebMvc
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/* Time, in seconds, to have the browser cache static resources (one week). */
private static final int BROWSER_CACHE_CONTROL = 604800;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/images/**")
.addResourceLocations("/images/")
.setCachePeriod(BROWSER_CACHE_CONTROL);
}
}
Смотри также: http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html