Spring MVC VersionResourceResolver / ContentVersionStrategy not working correctly in JSP

I have a Spring MVC application (4.3.0) and a VersionResourceResolver is registered with the addition of ContentVersionStrategy with ResourceHandlerRegistry. I have ResourceUrlEncodingFilter enabled.

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

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        boolean devMode = this.env.acceptsProfiles("local");
        //boolean useResourceCache = !devMode;
        Integer cachePeriod = devMode ? 0 : (60 * 60 * 24 * 365); //If dev clear cache else 1 year

        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
                .setCachePeriod(cachePeriod)
                .resourceChain(false)
                .addResolver(new VersionResourceResolver()
                    .addContentVersionStrategy("/**"))
                .addTransformer(new AppCacheManifestTransformer());
}

When I access something in / resources (JS, Images, CSS, etc.) on a JSP page using c: url or spring: url tags, the URL with the version does not display (which means: no hash code in the url). Example:

<link href="<c:url value="/resources/css/views/login.css" />" rel="stylesheet">

Produces: /myapp/resources/css/views/login.css as a URL string when checking a page.

But if I use ResourceURLProvider in my controller, I do see the hash code in the url:

@Autowired
private ResourceUrlProvider mvcResourceUrlProvider;

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

    logger.debug("js =  '" + this.mvcResourceUrlProvider.getForLookupPath("/resources/js/views/overview.js") + "'");
    logger.debug("css =  '" + this.mvcResourceUrlProvider.getForLookupPath("/resources/css/views/overview-page.css") + "'");

    return "redirect:/admin/overview";
}

The following is displayed in the log messages:

2016-07-09 11:47:19   DEBUG AdminLoginController:35 - js =  '/resources/js/views/overview-36d1ff98d627d92a72d579eca49dbd8a.js'
2016-07-09 11:47:19   DEBUG AdminLoginController:36 - css =  '/resources/css/views/overview-page-d47f10e5bcf0fdd67bd8057479b523f0.css'

, JSP?

Spring Security (4.1.0)...

+4
2

, , . . JSP :

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

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

bean :

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Bean
  public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
    final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new ResourceUrlEncodingFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    return filterRegistrationBean;
  }
}
+4

- , . , , AbstractAnnotationConfigDispatcherServletInitializer, !

@Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);

        FilterRegistration.Dynamic fr = servletContext.addFilter("resourceUrlEncodingFilter",
                new ResourceUrlEncodingFilter());
        fr.setInitParameter("encoding", "UTF-8");
        fr.setInitParameter("forceEncoding", "true");
        fr.addMappingForUrlPatterns(null, true, "/*");
}
+3

All Articles