提交表单时出现 InvalidCsrfTokenException

Posted

技术标签:

【中文标题】提交表单时出现 InvalidCsrfTokenException【英文标题】:InvalidCsrfTokenException when submitting a form 【发布时间】:2015-09-16 10:59:49 【问题描述】:

我正在使用基于 Spring 的 Web 应用程序(版本 4.1.6.RELEASE,spring security 4.0.0.RELEASE),并且在提交表单(POST 方法)后出现错误 InvalidCsrfTokenException: Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.。根据spring's documentation“Spring Security 自动为您使用的任何<form:form> 标签插入一个 CSRF 表单字段”,那么为什么我会收到此异常? 提前致谢。 这是我的弹簧安全配置:

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd">
<http use-expressions="true" disable-url-rewriting="true">
    <headers>
        <frame-options/>
        <xss-protection/>
        <hsts/>
    </headers>
    <csrf/>
    <intercept-url pattern="/welcome" access="isAuthenticated()" />
    <!-- some others urls to intercept -->
    <form-login login-page="/login" default-target-url="/welcome"
            authentication-failure-url="/loginfailed" />
    <logout logout-success-url="/logout" />
    <session-management>
        <concurrency-control max-sessions="1" expired-url="/login" />
    </session-management>
</http>

这是我的表单的定义(不包括它包含的字段):

<form:form action="myaction" method="post" enctype="multipart/form-data" id="formId" modelAttribute="myBean">
</form:form>

任何帮助将不胜感激

【问题讨论】:

嗨@smoggers,非常感谢您提供此链接,请发表您的评论作为答案,我会接受,问候 好的,很高兴它解决了您的问题 【参考方案1】:

出现问题是因为您使用的是多部分表单。请在此处查看接受的答案:

Spring CSRF token does not work, when the request to be sent is a multipart request

【讨论】:

以上是关于提交表单时出现 InvalidCsrfTokenException的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单:提交表单时出现隐藏字段错误

将 ajax 表单提交到 PHP 脚本时出现问题

在 PHP,Codeigniter 中提交带有空字段的表单时出现一些错误

使用laravel提交表单以处理时出现MethodNotAllowedHttpException?

表单提交中文时出现乱码

在文章中提交 PHP 表单时出现 Joomla 2.5 404 错误