具有指纹的Thymeleaf和静态资源

时间:2015-04-28 08:34:18

标签: java spring thymeleaf

我尝试使用ResourceResolvers和ResourceTransformers为我的一些静态文件(例如app.min.js / style.min.css)添加指纹后缀 http://spring.io/blog/2014/07/24/spring-framework-4-1-handling-static-web-resources

我已经像这样配置了ResourceHandler

select offlocation AS city , count(*)  as cnt from
(

  select distinct offlocation,offbegindate,crscode from offering

) v 

group by city 
order by cnt desc;

在我的主控制器中添加了一些调试日志。

@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("/**")   
                        );
 }
}

运行Web应用程序后,从调试日志中,每个文件中都有指纹,如

APP-5d2c76ad6517f26d252d5cc93a4fc7d2.js

我可以直接访问此文件,(即通过localhost:8080 / build / app-5d2c76ad6517f26d252d5cc93a4fc7d2.js)

但是,当我在网络浏览器上点击查看源时,它仍然是没有任何指纹的原始文件。

在我的layout.html中我加载了这样的脚本/链接。

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

我使用Thymeleaf作为模板引擎。 配置或代码应该是什么使Thymeleaf包含指纹文件或者我错过了什么?

非常感谢。

2 个答案:

答案 0 :(得分:4)

确保您包含相应的编码过滤器,这是@{}语法用于重写网址的内容:

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

答案 1 :(得分:1)

尝试此操作以将指纹与文件名

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

以上结果如下:

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

我知道这已经很晚了,但是我一直在寻找相同的答案来解决如何使用addContentVersionStrategy渲染网址的问题,并且希望能帮助其他人。