在做一个SSM项目时,前后台传值中文总是乱码,让人抓狂。我原以为是SpringMVC的问题,但是所有的办法都试过了还是不能解决问题,包括在web.xml中设置过滤器,修改页面编码,设置tomcat的编码,问题依旧。在困扰了几天后,突然意识到我在项目中加入了Spring Security来控制用户权限,这样就导致了在web.xml中设置的CharacterEncodingFilter不在第一位置(Spring Security在第一个),所以CharacterEncodingFilter失效。找到了问题所在,那么问题就好解决了,只要在Spring Security的配置中设置编码过滤器就好了。
下面为Java Config配置:
public class MmsSecurityWebInitializer 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, "/*");
}
}