1. 程式人生 > >spring security中csrf的處理

spring security中csrf的處理

spring boot 與spring security進行整合的時候需要考慮csrf的問題。但是,有時候csrf會攔截所有的post請求,此時應該怎麼辦,,,

    首先,我們在header.html中新增一下程式碼(此處的header.html可以理解為每個頁面的頭部,為了整合方便,將頁面頭部單獨提取出來為header.html)   

<!-- CSRF -->
<meta name="_csrf" th:content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
其次,在使用ajax提交post表單的時候,先獲取token,使用如下程式碼獲取:
// 獲取 CSRF Token 
var csrfToken = $("meta[name='_csrf']").attr("content");
var csrfHeader = $("meta[name='_csrf_header']").attr("content");

在ajax訪問後臺之前呼叫beforesend,先在請求頭中新增token
beforeSend: function(request) {
request.setRequestHeader(csrfHeader, csrfToken); // 新增 CSRF Token
},

完整呼叫的ajax如下:
$("#rightContainer").on("click",".blog-delete-user", function () { 
// 獲取 CSRF Token
var csrfToken = $("meta[name='_csrf']").attr("content");
var csrfHeader = $("meta[name='_csrf_header']").attr("content");
$.ajax({
url: "/users/" + $(this).attr("userId") ,
type: 'DELETE',
beforeSend: function(request) {
request.setRequestHeader(csrfHeader, csrfToken); // 新增 CSRF Token
},
success: function(data){
if (data.success) {
// 從新重新整理主介面
getUersByName(0, _pageSize);
} else {
toastr.error(data.message);
}
},
error : function() {
toastr.error("error!");
}
});
});