2017-01-30 54 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