带有 Spring Security CSRF 令牌的 jQuery 文件下载插件问题
Posted
技术标签:
【中文标题】带有 Spring Security CSRF 令牌的 jQuery 文件下载插件问题【英文标题】:jQuery File Download plugin issue with Spring Security CSRF token 【发布时间】:2017-08-03 16:30:42 【问题描述】:我正在使用 jQuery 文件下载插件,而对于后端,我正在使用带有 Spring Security 的 Spring,当我尝试将请求发送回浏览器以下载文件时,我收到 403 错误:
HTTP 状态 403 - 在请求参数“_csrf”或标头“X-CSRF-TOKEN”上发现无效的 CSRF 令牌“null”。
我正在尝试将此参数作为请求标头传递,这怎么可能进入这个插件?
例如,在一个简单的 AJAX 请求中,我通过以下方式完成了此操作:
var header = $("meta[name='_csrf_header']").attr("content");
var token = $("meta[name='_csrf']").attr("content");
$.ajax(dataType : 'json',
url : serverURL,
data : filesData,
type : fetchMethod,
enctype: 'multipart/form-data',
processData: false,
contentType:false,
beforeSend: function(xhr)
xhr.setRequestHeader(header, token);
)
而且效果很好!
【问题讨论】:
【参考方案1】:你可以传递'_csrf'参数如下
$.fileDownload(url,
data:
'_csrf': <CSRF-TOKEN>
,
successCallback: function (html,data)
,
failCallback: function (form,data)
);
【讨论】:
以上是关于带有 Spring Security CSRF 令牌的 jQuery 文件下载插件问题的主要内容,如果未能解决你的问题,请参考以下文章
带有 enctype="multipart/form-data" 的 Spring Security CSRF [重复]
如何将 Spring Security 的 CSRF 功能用于无状态端点?
使用 CSRF 登录后如何启用 Spring Security POST 重定向?
Gatling 测试 CSRF Spring Security 通过 Web 表单阻止了我的帖子
使用 Spring Security 3.2.0.RELEASE,如何在没有标签库的纯 HTML 页面中获取 CSRF 令牌
Spring Boot、Spring Security 和 Thymeleaf:将 CsrfFilter 应用到带有表单的网站