java - 如何在 Spring MVC 中设置缓存 header ?

标签 java spring caching spring-mvc

在基于注解的 Spring MVC Controller 中,为特定路径设置缓存头的首选方法是什么?

最佳答案

我刚遇到同样的问题,发现框架已经提供了一个很好的解决方案。 org.springframework.web.servlet.mvc.WebContentInterceptor 类允许您定义默认缓存行为,以及特定于路径的覆盖(与其他地方使用的相同路径匹配器行为)。我的步骤是:

  1. 确保我的 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 实例没有设置“cacheSeconds”属性。
  2. 添加一个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 下的响应包含不鼓励缓存的 header ,/cache/me 下的响应包含鼓励缓存的 header ,而/cache/agnostic 下的响应不包含与缓存相关的 header 。


如果使用纯 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

关于java - 如何在 Spring MVC 中设置缓存 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362930/

相关文章:

c# - 给定单例缓存模式的缺点

javascript - 缓存 facebook 和 g+ js 文件,没有错误,但有按钮

java - Spring 安全: method is not secured with @PreAuthorize annotation

java - 关于 LeetCode 279. 完美正方形的问题

java - Spring 不通过加载时编织器 Autowiring 集合

java - 如何在不使用Eclipse的情况下在spring和maven中运行Hello World程序

java - 对字符串数组进行排序

java - 无法向下滚动

java - 使用 JdbcUserDetailsManager 与自己的 UserDetailsS​​ervice

javascript - 如何在完全缓存使用的情况下触发 F5 键并手动重新加载页面