无法为任何静态资源设置缓存控制头(Spring)

时间:2017-01-30 08:26:19

标签: java spring tomcat caching

我正在尝试为我网站中的任何静态资源(图像,js,css)设置缓存控制。我正在使用Spring 4(使用Spring Security)和Tomcat 8服务器。

我已经尝试在我的web.xml中设置ExpiryFilter

<filter>
    <filter-name>ExpiresFilter</filter-name>
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
    <init-param>
       <param-name>ExpiresByType image</param-name>
       <param-value>access plus 2 weeks</param-value>
    </init-param>
    <init-param>
       <param-name>ExpiresByType text/css</param-name>
       <param-value>access plus 2 weeks</param-value>
    </init-param>
    <init-param>
       <param-name>ExpiresByType text/javascript</param-name>
       <param-value>access plus 2 weeks</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>ExpiresFilter</filter-name>
    <url-pattern>/resources/*</url-pattern>
</filter-mapping>

但是由于ExpiresFilter无法正常工作,我尝试使用缓存周期设置MVC资源:

<mvc:resources mapping="/resources/**" location="/resources/,classpath:/resources/" cache-period="2592000" />
<mvc:annotation-driven />

但它也不起作用。

我还试图检查我的web.xml中的过滤器映射是否有效,但事实证明它没有过滤任何images / js / css类型,而是过滤了我的html文件。我的静态文件保存在webapp / resources文件夹中,无论我的html文件是否在webapp / WEB-INF / jsp文件中。

我还在Spring安全配置中添加了这个:

<http pattern="/resources/**" security="none"></http>

我有什么想念吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我在tomcat的logging.properties中启用了org.apache.catalina.filters.ExpiresFilter.level = FINE的t​​omcat过滤器的日志记录。

当过滤器初始化时,以下日志打印在catalina日志中:

使用配置ExpiresFilter初始化的过滤器[excludedResponseStatusCode = [304],default = null,byType = {text / css = ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]],application / javascript = ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]] ,image = ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]]}]

您可以看到所有状态为304的http响应都会被排除在外,以便设置缓存控制参数。

我配置了tomcat过滤器,我的资源被缓存了。我可以通过过滤日志确认:

org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody FINE:请求“/static/img/home/phone_icon2.png”,响应状态为“200”内容类型“image / png”,设置过期日期1/31/17 11:59 AM 2017年1月31日上午11:49:30 org.apache.catalina.filters.ExpiresFilter getExpirationDate 精细:使用ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]]匹配“image”,内容类型“image / png”返回1/31/17 11:59 AM 2017年1月31日上午11:49:30 org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody FINE:请求“/static/img/home/bgimage.png”,响应状态为“200”content-type“image / png”,设置过期日期1/31/17 11:59 AM 2017年1月31日上午11:49:30 org.apache.catalina.filters.ExpiresFilter getExpirationDate 精细:使用ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]]匹配“image”,内容类型“image / png”返回1/31/17 11:59 AM

我建议您先启用记录Reference