1. 程式人生 > >【spring boot】ajax post提交遇到403

【spring boot】ajax post提交遇到403

概述

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