2015-04-28 75 views
8

我試圖指紋添加後綴以我的一些靜態文件(例app.min.js/style.min.css)使用ResourceResolvers和ResourceTransformers http://spring.io/blog/2014/07/24/spring-framework-4-1-handling-static-web-resourcesThymeleaf和靜態資源指紋

我有配置像這樣的ResourceHandler

@Configuration 
@EnableWebMvc 
public class ResourceResolverConfiguration extends WebMvcConfigurerAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("bower_components/**/*.js", "/assets/**", "/build/**") 
       .addResourceLocations("/bower_components/", "/assets/", "/build/","classpath:/META-INF/webapp/build/") 
       .resourceChain(true) 
       .addResolver(
         new VersionResourceResolver() 
          .addContentVersionStrategy("/**") 
         ); 
} 
} 

和在我的主控制器我添加了一些調試日誌。

logger.debug("js = '{}'" + this.resourceUrlProvider.getForLookupPath("/build/app.js")); 
logger.debug("css = '{}'" + this.resourceUrlProvider.getForLookupPath("/build/styles/style.css")); 

後運行Web應用程序,從調試日誌中,有像

APP-5d2c76ad6517f26d252d5cc93a4fc7d2.js

每個文件的指紋,我可以訪問此文件直接,(即通過localhost:8080/build/app-5d2c76ad6517f26d252d5cc93a4fc7d2.js)

但是,當我在瀏覽器中點擊查看源代碼時,它仍然是一個沒有任何指紋的原始文件。

它在我的layout.html我加載腳本/鏈接像這樣。

<script th:src="@{/build/app.js}"></script> 
<link th:href="@{/build/styles/style.css}" rel="stylesheet"></link> 

我使用Thymeleaf作爲模板引擎。 配置或代碼應該使Thymeleaf包含指紋文件或我錯過了什麼?

非常感謝。

+0

這是否解決了? – igracia

+0

有誰知道速度的相應語法? –

回答

2

確保您包括相應的編碼過濾器,這是什麼@{}語法用來重寫URL:

@Bean 
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { 
    return new ResourceUrlEncodingFilter(); 
} 
1

試試這個來渲染指紋與文件名

<script th:src="${@mvcResourceUrlProvider.getForLookupPath('/build/app.js')}" /> 

沿以上結果爲:

<script src="/build/app-16e85c31092c68733df3c729b831dcfd.js"></script> 

我知道這是遲到,bu t我正在尋找如何使用addContentVersionStrategy呈現網址的相同答案,並且這個問題出現了,所以希望它可以幫助其他人。