我试图实现资源版本控制以使我的静态文件(js和css)由spring的VersionResourceResolver根据Spring's documentation动态地进行版本控制
我有我的xml配置:
<mvc:resources mapping="/css/**" location="/css/">
<mvc:resource-chain resource-cache="true" auto-registration="true">
<mvc:resolvers>
<mvc:version-resolver>
<mvc:content-version-strategy patterns="/**"/>
</mvc:version-resolver>
</mvc:resolvers>
</mvc:resource-chain>
</mvc:resources>
<mvc:resources mapping="/js/**" location="/js/">
<mvc:resource-chain resource-cache="true" auto-registration="true">
<mvc:resolvers>
<mvc:version-resolver>
<mvc:content-version-strategy patterns="/**"/>
</mvc:version-resolver>
</mvc:resolvers>
</mvc:resource-chain>
</mvc:resources>
当我在web.xml中添加ResourceUrlEncodingFilter时,效果很好:
<filter>
<filter-name>resourceUrlEncodingFilter</filter-name>
<filter-class>org.springframework.web.servlet.resource.ResourceUrlEncodingFilter</filter-class>
<init-param>
<param-name>addMappingForUrlPatterns</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>resourceUrlEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
唯一的问题是,当web.xml上存在springSecurityFilterChain时,它不起作用,如果我评论springSecurityFilterChain的行,则根据this,过滤器将完美地工作
按照here的规定,post似乎是在4.1.2版本上解决的错误
静态文件的url会被完全忽略,ResourceUrlEncodingFilter仅在未启用安全性时才调用它的encodeURL()方法,如何解决它的任何想法?我认为该错误的解决方案已添加到4.1.5.RELEASE版本中。
最佳答案
仅在未启用安全性时才调用过滤器(ResourceUrlEncodingFilter)的事实使我相信Spring Security会拦截对您的静态资源的调用(而不是让它们传递给过滤器)。请验证您的Spring Security配置是否允许调用静态资源。
假设您的“css”和“js”文件夹位于src / main / resources下,则可以执行以下操作:
(JavaConfig)
class SecurityConfig extends WebSecurityConfigurerAdapter {
...
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
...
}
(XML配置)
...
<http security="none" pattern="/resources/**"/>
...
关于java - Spring 4.1.5.RELEASE中的ResourceUrlEncodingFilter启用了springSecurityFilterChain,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29244732/