spring security CSRF阻止 REST 方法提交数据

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值