Spring Security CSRF令牌不适用于AJAX

我的spring启动应用程式中有csrf凭证有问题。

我有一个可以编辑个人的表格。一个人可以拥有

现在让我们想象这个人有一辆汽车,然后进入并存储它。下次他要删除这辆车并输入另一辆车时。我已经创建了这个列表,以便列出他所有的汽车-

他可以选择将其从列表中删除。现在,我将从这些药开始,并希望将具有相应ID的POST发送到服务器。当我尝试时,我被禁止使用403,我也不知道为什么。

如果我从POST更改为GET,则可以使用。

我的JavaScript(摘自该网站:http :

//docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-

SNAPSHOT/reference/htmlsingle/#the-csrfmetatags-

tag)

var csrfParameter = $("meta[name='_csrf_parameter']").attr("content");

var csrfHeader = $("meta[name='_csrf_header']").attr("content");

var csrfToken = $("meta[name='_csrf']").attr("content");

// using JQuery to send a non-x-www-form-urlencoded request

var headers = {};

headers[csrfHeader] = csrfToken;

$.ajax({

url: "./delete/car",

type: "GET",

headers: headers,

});

$.ajax({

url: "./delete/car",

type: "POST",

headers: headers,

});

我的控制器方法:

@RequestMapping(value = "/{login}/delete/car", method = RequestMethod.GET)

public ModelAndView delete(@PathVariable("login") final String login) {

System.out.println("Stop");

return new ModelAndView("redirect:" + WebSecurityConfig.URL_PERSONS_OVERVIEW);

}

@RequestMapping(value = "/{login}/delete/car", method = RequestMethod.POST)

public ModelAndView deleteInstEmp(@PathVariable("login") final String login) {

System.out.println("Stop");

return new ModelAndView("redirect:" + WebSecurityConfig.URL_PERSONS_OVERVIEW);

}

有什么建议么?

提前致谢。

回答:

好的,经过所有这些努力之后,我得到了以下结果。

我将fail方法添加到Ajax构造中并获得以下消息:

“无法在’XMLHttpRequest’上执行’setRequestHeader’:’$ {_

csrf.headerName}’不是有效的HTTP标头字段名称。”

Spring官方网站建议您必须在HTML文件中添加<sec:csrfMetaTags />以下内容:<meta name="_csrf"

th:content="${_csrf.token}"/>

此后,您应该能够在JavaScript中访问这些属性,但是在我的情况下,我得到了undefined${_csrf.headerName}

最后一次尝试是从隐藏值中获取值(第24.5章:http :

//docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-

SNAPSHOT/reference/htmlsingle/#the-csrfmetatags

-tag)。

现在,我有以下内容:

$(function () {

var token = $("input[name='_csrf']").val();

var header = "X-CSRF-TOKEN";

$(document).ajaxSend(function(e, xhr, options) {

xhr.setRequestHeader(header, token);

});

});

$.ajax({

url: "./delete/car",

type: "POST",

success:function(response) {

alert(response);

}

});

有了它,它就像一种魅力。

以上是 Spring Security CSRF令牌不适用于AJAX 的全部内容, 来源链接: utcz.com/qa/405584.html

回到顶部