Java 无效的CSRF令牌';空';当我使用带有Spring安全性的PUT方法时

Java 无效的CSRF令牌';空';当我使用带有Spring安全性的PUT方法时,java,spring,Java,Spring,这是我的javascript。 我正在尝试发送PUT消息编辑 $.ajax({ url: "/questions/" + _questionId + "/answers/" + answerId + "/edit", method: "put", data: { id : answerId, body : body, "${_csrf.parameterName}": "${_

这是我的javascript。 我正在尝试发送PUT消息编辑

$.ajax({
        url: "/questions/" + _questionId + "/answers/" + answerId + "/edit",
        method: "put",
        data: {
            id : answerId,
            body : body,
            "${_csrf.parameterName}": "${_csrf.token}"
        }
这是服务器代码

@ResponseBody
@PreAuthorize("hasAuthority('ADMIN') or principal == #answer.content.user")
@RequestMapping(value = "/questions/{questionId}/answers/{answerId}/edit", method = PUT)
void editAnswer(@PathVariable(value = "questionId") Question question, @AuthenticationPrincipal CurrentUser currentUser,
                AnswerForm answerForm, @PathVariable("answerId") String answerId) {

    answerService.edit(answerForm, currentUser.getUser());
}
并提出了控制器的设计方法

当我尝试使用POST方法时,它是有效的。 但我只是改变了服务器和客户端的方法(PUT)。 broswer控制台上禁止403的无效CSRF令牌“null”


帮助。

似乎无法识别PUT请求正文中的CSRF令牌(Servlet容器不会从PUT请求正文生成参数映射)

但您可以通过以下方式发送:


似乎无法识别PUT请求主体中的CSRF令牌(Servlet容器不会从PUT请求主体生成参数映射)

但您可以通过以下方式发送:

查看此链接:。我遇到了类似的问题。如果我使用POST方法,那么将
放入即可。然而,如果我在ajax中使用PUT方法。它不起作用。然后我使用headers方法。头名称应该是
X-CSRF-TOKEN,而不是
${u CSRF.parameterName}`。
请尝试以下代码:

$.ajax({
url: "/questions/" + _questionId + "/answers/" + answerId + "/edit",
method: "put",
headers: { "X-CSRF-TOKEN": "${_csrf.token}" },
data: {
    id : answerId,
    body : body,
} });
查看此链接:。我遇到了类似的问题。如果我使用POST方法,那么将
放入即可。然而,如果我在ajax中使用PUT方法。它不起作用。然后我使用headers方法。头名称应该是
X-CSRF-TOKEN,而不是
${u CSRF.parameterName}`。
请尝试以下代码:

$.ajax({
url: "/questions/" + _questionId + "/answers/" + answerId + "/edit",
method: "put",
headers: { "X-CSRF-TOKEN": "${_csrf.token}" },
data: {
    id : answerId,
    body : body,
} });