当前位置: 首页 > 知识库问答 >
问题:

尝试在Spring MVC和Thymeleaf中使用React/Ajax调用

贺浩漫
2023-03-14

根据文档,我应该能够在标题中包含CSRF令牌,使用jquery获取它们,并将它们包含在ajax调用的标题中。

不幸的是,包括

<html class='default' xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset='UTF-8'/>
    <meta http-equiv='X-UA-Compatible' content='IE=Edge,chrome=1' />
    <meta name="_csrf" content="${_csrf.token}"/>
    <!-- default header name is X-CSRF-TOKEN -->
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
...
</html>

输出:

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="_csrf" content="${_csrf.token}">
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}">

而且不是真正的代币,所以没有什么可抢的。

有没有人用这种方式处理ajax帖子/放置/删除成功?

参考号:http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html

共有2个答案

党佐
2023-03-14

下面是我如何进行ajax csrf的。

$(function() {
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);
}
}

我还使用ajaxForm插件提交表单,在这种情况下,我将csrf嵌入到操作url中。

希望这对你有用。

姚和顺
2023-03-14

您忘记了前缀“th”。您的模板应该如下所示:

<meta id="_csrf" name="_csrf" th:content="${_csrf.token}"/>
<meta id="_csrf_header" name="_csrf_header" th:content="${_csrf.headerName}"/>

和你的ajax调用:

var token = $('#_csrf').attr('content');
var header = $('#_csrf_header').attr('content');

$.ajax({
    type: "POST",
    url: url,
    beforeSend: function (xhr) {
        xhr.setRequestHeader(header, token);
    },
    success: function (data, textStatus, jqXHR) {
        alert(status);
    },
    error: function (request, status, error) {
        alert(status);
    }
});
 类似资料:
  • 我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。

  • 因此,根据本教程中关于介质的内容(https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f#.d7ymg99mp),我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获取结果。 这是我正在做的事情的代码 我对如何使用$.when函数以及在哪里可以访问返回到ajax调用的数据感到困惑。

  • 问题内容: 我想在需要时调用useQuery, 但是useQuery不能在函数内部。 我尝试的代码是: 如何多次调用useQuery? 我可以随时打电话吗? 我已经寻找了几个站点,但是找不到解决方案。 问题答案: 是一个声明式的React Hook。它不具有经典的接收数据功能。首先,请确保了解React Hooks或暂时不使用它们(Stackoverflow上90%的问题发生是因为人们试图一次学习

  • 我的React组件需要一个ajax调用来获取要呈现的数据。 最初,我使用该方法在Render中启动了一个ajax调用。这是我的伪代码... 在阅读了关于呈现调用的React文档后,我有点担心在呈现调用中更改存储区,即使是异步的。 我提出了另一种使用componentDidMount和ComponentDidUpDate的方法。这最终变得稍微复杂一些,因为在最初呈现组件时,componentDidM

  • 我需要在VsCode上调试我的反应原生应用程序,我是新的反应原生开发...:)我搜索并遵循不同的方法,但没有运气...:(首先,我遵循此方法https://medium.com/@Tunvirrahmantushs/react-nate-debug-with-vscode-in-imple-steps-bf39b6331e67并遵循此方法https://www.youtube.com/watch?

  • 本文向大家介绍SpringMVC中使用Thymeleaf模板引擎实例代码,包括了SpringMVC中使用Thymeleaf模板引擎实例代码的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是SpringMVC中使用Thymeleaf模板引擎的相关内容,具体介绍如下。 Thymeleaf提供了一组Spring集成,允许您将其用作Spring MVC应用程序中全面替代JSP的功能。 Maven依