Java Spring Security生成空CSRF令牌-属性或字段';参数名称';在null上找不到

Java Spring Security生成空CSRF令牌-属性或字段';参数名称';在null上找不到,java,spring,spring-mvc,spring-security,spelevaluationexception,Java,Spring,Spring Mvc,Spring Security,Spelevaluationexception,几天来,我一直在尝试实现Spring安全性,并且一直在努力使用csrf令牌 我已经调试到CsrfRequestDataValueProcessor中,发现下面的行返回null CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); 使用Thymeleaf,我有以下形式: <form th:action="@{/j_spring_security_check}" method="post"

几天来,我一直在尝试实现Spring安全性,并且一直在努力使用
csrf令牌

我已经调试到
CsrfRequestDataValueProcessor
中,发现下面的行返回null

CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
使用Thymeleaf,我有以下形式:

<form th:action="@{/j_spring_security_check}" method="post">
  <label for="j_username">Username</label>:
  <input type="text" id="j_username" name="j_username" /> <br />
  <label for="j_password">Password</label>:
  <input type="password" id="j_password" name="j_password" /> <br />
  <input type="submit" value="Log in" />
  <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
</form>

用户名:

密码:
它不会渲染并引发以下异常:

请求处理失败;嵌套异常为org.thymeleaf.exceptions.TemplateProcessingException:异常评估SpringEL表达式:“\u csrf.parameterName”(loginsample:19)],根本原因为org.springframework.expression.spel.SpelEvaluationException:EL1007E:(位置0):在null上找不到属性或字段“parameterName”


为什么会这样?

您使用的是Java还是XML配置?如果是XML,请确保启用csrf令牌:

。。。

您可能还需要导入JSP标记库: 导入安全标签:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

然后在头部添加以下内容:

<sec:csrfMetaTags /> 


您可能需要导入taglib依赖项。

是否使用spring security 4?如何生成csrf令牌?