【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

    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中添加

"_csrf" th:content="${_csrf.token}"/>
"_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);
});

你可能感兴趣的:(spring-boot)