Spring MVC资源版本控制添加ResourceUrlEncodingFilter

时间:2014-10-09 10:40:26

标签: spring-mvc

我试图从4.1工作中获取新的资源版本。来自

http://spring.io/blog/2014/07/24/spring-framework-4-1-handling-static-web-resources

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-static-resources

我似乎无法正确注册ResourceUrlEncodingFilter。你是如何做到这一点所以它在jsp中获取网址? 我正在使用javaconfig和我的扩展WebMvcConfigurerAdapter - > addResourceHandlers方法我有

registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/META-INF/resources/static/")
            .resourceChain(true)
            .addResolver(
                    new VersionResourceResolver()
                            .addFixedVersionStrategy("1.1.0", "/**/*.js")
                            .addContentVersionStrategy("/**"));

这似乎有效,因为我可以在控制器中获得更改

@Autowired
private ResourceUrlProvider resourceUrlProvider;


@RequestMapping(value = "/test", method = RequestMethod.GET)
public String homePub() {

    logger.debug("js =  '{}'", this.resourceUrlProvider.getForLookupPath("/static/test.js"));
    logger.debug("css =  '{}'", this.resourceUrlProvider.getForLookupPath("/static/test.css"));

    return "test";
}

将输出

DEBUG TestController - js =  '/static/1.1.0/test.js'
DEBUG TestController - css = '/static/styles/test-4c517674c05348b2aa87420e7adc420b.css'

最初jsp中的网址被忽略,所以我添加了

container.addFilter("resourceUrlEncodingFilter",  ResourceUrlEncodingFilter.class).addMappingForUrlPatterns(
            null, true, "/*");

我的WebApplicationInitializer实现

这给出了以下例外

java.lang.IllegalStateException: Failed to determine lookup path: /test/static/test.js

所以至少我知道过滤器被调用它只是没有拿起我的处理程序 我尝试为/ test / static / **添加资源处理程序,但这没有帮助。 将isMatchAfter更改为false会停止异常,但似乎不会调用过滤器。

jsp问题很简单

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

<c:url value='/static/test.js'/>

所以我猜这不是如何设置ResourceUrlEncodingFilter,应该如何添加

1 个答案:

答案 0 :(得分:1)

似乎有一个错误

https://jira.spring.io/browse/SPR-12279

您需要添加

@Override
public HandlerMapping resourceHandlerMapping() {
    SimpleUrlHandlerMapping handlerMapping = (SimpleUrlHandlerMapping) super.resourceHandlerMapping();
    handlerMapping.setInterceptors(this.getInterceptors());
    return handlerMapping;
}

并扩展WebMvcConfigurationSupport而不是WebMvcConfigurerAdapter

还有其他问题

https://jira.spring.io/browse/SPR-12281

并且securityFilter会导致问题,但上面的内容应该可以使基础工作

更新:4.1.2版本解决了这些问题