ResourceUrlEncodingFilter

ResourceUrlEncodingFilter

我试图实现资源版本控制以使我的静态文件(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/

10-09 01:07