2017-01-30 58 views
0

我想为我的网站中的任何静态资源(图像,js,css)设置缓存控制。我正在使用Spring 4(与Spring Security)和Tomcat 8服务器。无法为任何静态资源设置缓存控制标题(春季)

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

<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文件中。

我也在我的春季安全配置补充一点:

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

有什么我错过?

谢谢。

回答

0

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

当过滤器得到初始化以下日志得到印在卡塔利娜日志:

过滤器具有配置ExpiresFilter初始化[excludedResponseStatusCode = [304],默认= NULL,byType的= {文本/ CSS = ExpiresConfiguration [起点= 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筛选器,并对资源进行了缓存。与响应状态“200”的内容类型“图像请求“/static/img/home/phone_icon2.png”:这个我可以由过滤器的日志确认:

org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody FINE/png“,set expiration date 1/31/17 11:59 AM Jan 31,2017 11:49:30 AM org.apache.catalina.filters.ExpiresFilter getExpirationDate FINE:使用ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [ 10分钟]]匹配“图像”的内容类型“image/png”返回2017/1/31 23:59 2017年1月31日上午11:49:30 org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody FINE :请求响应状态为“200”的“/static/img/home/bgimage.png”content-type“image/png”,设置截止日期1/31/17 11:59 AM 2017年1月31日上午11时49分30秒org.apache.catalina.filters.ExpiresFilter getExpirationDate FINE:使用ExpiresConfiguration [startingPoint = ACCESS_TIME,duration = [10 MINUTE]]匹配内容类型为“image”的图像/ png “返回1/31/17 11:59 AM

我建议你先启用日志记录Reference