【spring boot】ajax post提交遇到403
阿新 • • 發佈:2019-02-10
概述
spring boot中使用了spring security。
spring security對post請求會進行身份驗證。
spring security預設開啟了Cross Site Request Forgery (CSRF)。
當ajax post提交遇到403時,應當時缺少了csrf。
處理思路
1,可以禁用csrf。
2,配置中,加入排除csrf的地址。
3,補全csrf。(本次僅對此加以說明)
form中補全csrf
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token} "/>
ajax的url中補全csrf
themyleaf中寫法
-------------------------------
layedit.set({
uploadImage: {
url: '[(@{/cms/upload/photo})]?[(${_csrf.parameterName})]=[(${_csrf.token})]' //介面url
,type: 'post' //預設post
}
});
AJAX請求傳送前補全csrf:Ajax事件
XMLHttpRequest物件和設定作為引數傳遞給回撥函式
$(document).ajaxSend(function(evt,request,settings){})是全域性事件,也就是說,
只要該頁面定義了這個函式,那麼,在每個ajax請求前都會執行該函式
head中新增
<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
js檔案中新增
var token = $("meta[name='_csrf']" ).attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});