Spring mvc + Spring Security POST 编码设置

西瓜树上结葡萄 发布于 2016/11/19 02:13
阅读 808
收藏 1

编码这个坑就不重复提了,大家深有体会。

最近再用 Spring mvc 4.3.4 + Spring Security 3.2.9 做毕业设计

重点是使用了 Servlet 3.0

在解决 POST 编码的时候遇到严重问题

就是不管怎么设置 CharacterEncodingFilter  POST 提交都是乱码

比如下面设置:

protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();  
        characterEncodingFilter.setEncoding("UTF-8");  
        characterEncodingFilter.setForceEncoding(true);  
        return new Filter[] {characterEncodingFilter};



这是官方文档给出的设置方案,好吧在使用了 Spring Security 后,根本没用!

还有一种不靠普的配置方法在 AbstractAnnotationConfigDispatcherServletInitializer 继承类中

@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		super.onStartup(servletContext);
		servletContext.addFilter("encodingFilter", new CharacterEncodingFilter("UTF-8", true))
		.addMappingForUrlPatterns(null, false, "/*");
	}



这种方案在我遇到这个问题时给了我希望,好吧,不过马上就破碎了,这种配置方案, 时好时坏,有时编码没问题,有时编码又出问题,上天啊,救救我吧。

好吧,在翻遍谷歌后,终于在一个老外那看到了解决方案:

public class SecurityWebInitializer 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, false, "/*");
    }   
}



好吧,希望对你们有帮助!

加载中
返回顶部
顶部