使用SpringSecurity做安全验证时发现form表单中提交中文名会出现乱码问题。
原因是因为我在web.xml配置文件中将springSecurityFilterChain拦截器放在了
characterEncodingFilter前面,导致会先加载springSecurityFilterChain拦截器
再加载characterEncodingFilter拦截器,而加载springSecurityFilterChain拦截器
时会自动加载CsrfFilter拦截器,这个拦截器会给所有的请求增加一个名为CSRF Token
的请求头,这个请求头会将编码设定为iso-8859-1且无法修改,故而characterEncodingFilter
就失去了它原本的作用。
解决方法:将characterEncodingFilter配置放在springSecurityFilterChain前面就可以了
<!-- 解决中文乱码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置spring-security的filter-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>