我正在使用與CSRF春季安全和我有一個POST調用在我的JavaScript的問題。對於我的頁面,我使用Thymeleaf和HTML 5,其餘調用我的控制器我使用jQuery.ajax。 如果我這樣使用Ajax調用我的形式:春季CSRF與ajax休息電話和HTML頁與Thymeleaf使用
$(function() {
$("#saveCarButton").click(
function() {
var form = $("#addCarForm");
$.ajax({
type : "POST",
url : form.attr("action"),
data : form.serialize(),
// all right with rest call
success : function(data) {...}
//error during rest call
error : function(data) {
window.location.href = "/500";
}
});
});
});
一切正常,但是當我打電話例如這個函數:
jQuery.ajax({
url : 'upload',
type: 'POST',
contentType: false,
processData: false,
data:formData,
beforeSend:function(xhr) {
waitingModal.showPleaseWait();
},
success: function(data,status,xhr){...}
error: function(xhr,status,e){
}
}).complete(function() {
//add timeout because otherwise user could see a too fast waiting modal
setTimeout(function(){
waitingModal.hidePleaseWait();
}, 1000);
});
我收到錯誤403 也許與形式,使用thymeleaf,它工作正常,但第二種類型的請求我必須添加CSRF令牌。 我試着用
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
,在我的html頁面,我添加
!-- -->
<meta name="_csrf" th:content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
爲什麼與形式的工作不是嗎? 當我使用表單時,我不需要添加任何內容? 使用瀏覽器的開發工具可以看到_csrf和_csrf_header是否有危險? 感謝