图片上传报错 Invalid CSRF Token 'null' was found on the request parameter 'csrf' or header 'x-xsrf-token'

    做了一个图片上传功能,刚开发完的时候测试好好的。这了一段时间上传就报403了,后台返回错误信息Invalid CSRF Token 'null' was found on the request parameter 'p_csrf' or header 'x-xsrf-token'.。这是为什么呢?后来重启了一次问题解决但没过多长时间问题又出现了。看来这个问题得解决了。看了一下传参感觉也没问题。但是为什么会报这个错呢?翻源码也没找到是为什么。参数是有的但是就是取不到。后为尝试用postman把csrftoken参数加到了header里,报错竟然变成了Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\user\AppData\Local\Temp\tomcat.489169133972874740.7001\work\Tomcat\localhost\ROOT\home\admin\tmp] is not valid,原来是因为上传的临时目录不存在,果断按报错信息新建目录问题解决。但是目录为什么会补删除呢。查了一下是因为liunx会定期清理临时目录,但是又修改不了服务器配置,怎么能改变这个临时目录的位置又查了一下可以在application.properties文件里加spring.http.multipart.location=临时目录(目录必须存在,项目重启的时候并不会自动创建)

最终问题得到了解决。现就此问题总结如下:

   1.引起此问题的真正原因并不是csrf token获取不到,而是临时目录被删了(csrf获取不到掩盖了真实原因)

   2.在启用spring安全csrf验证之后csrf token最好还是用header方式传递避免出现这种掩盖真实错误加大问题的排查难度问题出现.

   3.spring上传临时目录补删引起的错误可以通过改变临时目录位置修复。配置项:spring.http.multipart.location=.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location

 下面是报错信息以便遇到同样问题的程序猿参考:

  

Apache Tomcat/8.5.6 - Error report