Spring MVC资源版本控制,添加ResourceUrlEncodingFilter


问题内容

我正在尝试从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中的url被忽略,所以我添加了

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,应如何添加


问题答案:

似乎有一个错误

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版解决了这些问题