如何通过Jqgrig请求发送Spring Security csrf

问题描述 投票:0回答:1

我正在使用Jqrgrid与Spring Security,但我如何使用JQGrid请求发送CSRF

jquery spring-security jqgrid
1个回答
0
投票

我不是Spring开发人员。您的问题的解决方案取决于您获取CSRF令牌的方式。似乎有两种主要方式:使用<meta>content等于${_csrf.token}或使用getCookie('csrftoken')

让我们跟随the part(或this one)的春季文档,我们添加<meta>元素_csrf_csrf_header如下

<!DOCTYPE html>
<html>
<head>
    <meta name="_csrf" content="${_csrf.token}"/>
    <!-- default header name is X-CSRF-TOKEN -->
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
    <!-- ... -->
</head>
<!-- ... -->

然后我们可以在beforeSend回调jQuery.ajax方法中设置Ajax请求的安全性令牌:

$.ajax({
    url: "someUrl",
    ...
    beforeSend: function(jqXHR) { 
        xhr.setRequestHeader(
            $("meta[name='_csrf_header']").attr("content"),
            $("meta[name='_csrf']").attr("content")
        );
    }
});

另一方面,jqGrid已在内部发出Ajax请求。因此,您必须使用jqGrid回调来通知jqGrid在底层Ajax请求中执行相同操作。因此,应该使用jqGrid的loadBeforeSend回调:

loadBeforeSend: function(jqXHR) {
    var header = $("meta[name='_csrf_header']").attr("content"),
        token = $("meta[name='_csrf']").attr("content");
    jqXHR.setRequestHeader(header, token);
}

如果你以后要实现jqGrid数据的编辑,那么你将不得不在其他回调中做一些事情,这允许在编辑网格期间在jQuery.ajax的setRequestHeader回调中调用beforeSend

© www.soinside.com 2019 - 2024. All rights reserved.