我们正在使用WebContentInterceptor来阻止对动态资源的缓存,但是无法将缓存标头添加到多个位置的静态资源中。
主要问题是来自依赖jars(bootstrap)的静态内容(glyphicons)被赋予no-cache标头,如果浏览器(IE 11 ..公司环境)被刷新,则字形图消失。
// servlet-context.xml
<mvc:annotation-driven ... />
<mvc:resources mapping="/resources/**" location="/resources/" cache-period="3600" />
<mvc:default-servlet-handler />
...
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**" />
<bean id="noCacheWebContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="0"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</mvc:interceptor>
这可以将缓存周期添加到/ resources /和no-cache中的静态资源,其他一切,我只需要在jar依赖项中添加一个缓存周期。我尝试了不同的资源映射,例如:
<mvc:resources mapping="/resources/**" location="/resources/, /webjars/" cache-period="3600" />
<mvc:resources mapping="/resources/**" location="/resources/, classpath:/META-INF/resources/" cache-period="3600" />
还尝试创建其他单独的资源映射,并为拦截器添加另一个mvc:exclude-mapping路径,但没有成功。我不确定我是否没有获得这些依赖关系罐的正确路径,或者是否可以映射这些位置,或者我是否只是做了其他错误。