这是情景:
我使用的是Spring Security 4.0.1,它默认启用了CSRF,一切正常,直到昨天。
昨天我添加了Spring Security Tags,登录(以及其他表单工作正常)但是一个特殊的表单停止了工作。
此表单是多部分,因为上传了两个文件,此表单具有CSRF参数但服务器正在返回:
HTTP状态403 - 未找到预期的CSRF令牌。你的会议 过期?
这基本上是以下形式:
<form id="documentForm" class="card-panel" method="POST" enctype="multipart/form-data" action="<c:url value="/documents/signDocument?${_csrf.parameterName}=${_csrf.token}"/>">
<input type="file" name="document"/>
<input type="text" name="signer"/>
</form>
当然这是表单的完全截止版本,但请注意CSRF参数是通过操作URL发送的。是的,我尝试将CSRF参数放在隐藏的输入中,结果相同。
在旁注中,此表单可以匿名用户身份访问
答案 0 :(得分:0)
您所面临的例外情况被抛入
org.springframework.security.web.csrf.CsrfFilter#doFilterInternal
在那里放置一个断点,您可以看到当前会话的预期csrf标记,以及从标头或请求参数接收的标记。
如果找不到正确的会话,或者会话cookie错误,也可能发生此错误,因此您可能还需要检查该错误。