SpringSecurity安全验证中文乱码问题

归德厚
2023-12-01

使用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>
 
 类似资料: