security 开启CSRF 会进行提交表单的tocken验证 但是REST方法没有tocken 提交
会阻止REST的DELETE PUT POST方法
解决办法 在thymeleaf里加上
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
然后 ajax里 加上 头信息
function deleteTable(url, token, tokenVal){
console.log($("input[type='hidden']").val() + $("input[type='hidden']").attr("name"))
//获取tocken
var val = $("input[type='hidden']").val();
var name = $("input[type='hidden']").attr("name");
//.定义headers,提交的时候带上headers的信息。
var headers = {};
headers['X-CSRF-TOKEN'] = val;
var r=confirm("确认删除该数据?");
if(r){
$.ajax({
url:url,
type:"DELETE",
headers: headers,
statusCode: { //返回状态码
204: function() {
console.log( "204" );
window.location.reload()
},
500: function() {
console.log( "500" );
},
400: function() {
console.log( "400" );
}
}
});
}
}
使用form表单提交
//使用form表单方式提交token
function deleteTable(url, token, tokenVal){
console.log($("input[type='hidden']").val() + $("input[type='hidden']").attr("name"))
//获取tocken
var val = $("input[type='hidden']").val();
var r=confirm("确认删除该数据?");
if(r){
$.ajax({
url:url,
type:"DELETE",
data: {
"_csrf": val
},
statusCode: { //返回状态码
204: function() {
console.log( "204" );
//window.location.reload()
},
500: function() {
console.log( "500" );
},
400: function() {
console.log( "400" );
}
}
});
}
}
form提交的时候,如果出现csrf问题,可将该参数作为隐藏项。跟第二种方式类似。
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
最后一招禁用csrf
@EnableWebSecurity配置中,禁用CSRF。
http.csrf().disable();