解决方法
1.可以考虑中间件编码配置
例如tomcat server.xml 的配置
eclipse的tomcat server 需要删掉再new一个,配置才生效
这个设置是影响URI中的字符编码,一般影响get请求的query string tomcat8后默认UTF-8,不需要另外设置
2.加上Spring的字符集filter
需确保该filter在最前面执行 注意Spring Security的filter一般会在最前面 Spring Security的CSRF检查会提早访问HttpServletRequest的参数,导致CharacterEncodingFilter失效
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
insertFilters(servletContext, new CharacterEncodingFilter(StandardCharsets.UTF_8.name()));
}
}
3.文件编码类型与tomcat的file.encoding参数不对应
JVM参数加上 -Dfile.encoding=UTF-8
IDE中可以在 VM arguement或VM options中添加
tomcat可以在 CATALINA_OPTS或JAVA_OPTS环境变量中添加,推荐CATALINA_OPTS
tomcat8.5后不需要加,应为默认