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!");
}
});
});

猜你喜欢

转载自www.cnblogs.com/pigwood/p/10102427.html