小编aju*_*asz的帖子

CharacterEncodingFilter不能与Spring Security 3.2.0一起使用

我是Spring MVC框架的新手,我遇到了一个我自己无法解决的问题.一切都是在我将spring security与我的应用程序集成后开始的,之后HTML表单中的所有unicode值都没有编码(spring security工作正常).我得出的结论是,这可能是因为我DelegatingFilterProxy被称为链中的第一个过滤器.

这是我认为可以使用的配置,但它没有:

1)我正在从javadoc扩展AbstractSecurityWebApplicationInitializer:

Registers the DelegatingFilterProxy to use the springSecurityFilterChain() before any
other registered Filter.
Run Code Online (Sandbox Code Playgroud)

从那个类我也覆盖了关于javadoc的SpringSecurityFilterChain方法:

Invoked before the springSecurityFilterChain is added.
Run Code Online (Sandbox Code Playgroud)

所以我认为这将是注册CharacterEncodingFilter的最佳位置:

public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我厌倦的另一个选择是通过覆盖getServletFilters()方法通过AbstractAnnotationConfigDispatcherServletInitializer类注册过滤器:

public class WebAppInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    //{!begin addToRootContext}
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { SecurityConfig.class, DatabaseConfig.class, InternationalizationConfig.class };
    }
    //{!end …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security spring-java-config

33
推荐指数
4
解决办法
2万
查看次数