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");
Integer cachePeriod = devMode ? 0 : (60 * 60 * 24 * 365);
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)...