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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Jqgrig请求发送Spring Security csrf相关的知识,希望对你有一定的参考价值。

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

答案

我不是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

以上是关于如何通过Jqgrig请求发送Spring Security csrf的主要内容,如果未能解决你的问题,请参考以下文章

Spring security:以编程方式登录

如何确定向远程 Spring Boot 服务器发送请求的 URL?

如何在 Spring Boot 框架中发送 HTTP 请求?

通过 Axios 发送一个 post 请求是在 Spring-Boot 后端生成一个空的 RequestBody。在 Postman 中工作,但不能通过 Axios 发布请求

如何在 Spring Framework 中发送和接收带参数的 ajax 请求?

如何在 spring-boot Web 客户端中发送请求正文?