Spring WebContentInterceptor没有向标头添加cacheSeconds

时间:2015-10-17 20:22:59

标签: spring spring-mvc spring-security cache-control

我正在尝试在spring mvc中添加配置,以便我的静态内容如js,图像将被浏览器缓存。我在dispatcher-servlet.xml中添加了以下内容

<beans>
.............
    <mvc:interceptors>
        <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
            <property name="cacheSeconds" value="31556926"/>
            <property name="useExpiresHeader" value="true"/>
            <property name="useCacheControlHeader" value="true"/>
            <property name="useCacheControlNoStore" value="true"/>
        </bean>
    </mvc:interceptors>
</beans>

但我仍然没有看到缓存已启用。我在浏览器调试器中看到以下内容,其中显示了Cache-Control:&#34; no-cache&#34;。

Firefox Debugger

请帮助!!!

3 个答案:

答案 0 :(得分:1)

您可以使用mvc:resources来缓存静态文件。

<mvc:resources mapping="/static/**" location="/public-resources/" 
       cache-period="31556926"/>
<mvc:annotation-driven/>

答案 1 :(得分:0)

您错过了cacheMappings property来配置路径模式/缓存指令。

<bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
  <property name="cacheSeconds" value="31556926"/>
  <property name="useExpiresHeader" value="true"/>
  <property name="useCacheControlHeader" value="true"/>
  <property name="useCacheControlNoStore" value="true"/>
  <property name="cacheMappings">
    <props>
      <prop key="/static/**">2592000</prop>
    </props>
  </property>
</bean>

但事实上,Burak Keceli的答案确实存在;您最好使用WebMvcConfigurerAdapter.addResourceHandlers或XML配置版本<mvc:resources/>

答案 2 :(得分:0)

我遇到了同样的问题。我添加了拦截器,但注意到在HTTP响应中发生了变化。

在我的案例中,我的项目中还有另一个Spring上下文XML,其中注册了另一个<mvc:interceptors>。它有效地取代了我的WebContentInterceptor配置。结合它们解决了它。

您的配置Abdus Samad可能会发生类似的事情......