Spring Security Proisting Null CSRF Token - Свойство или поле 'имя_параметра' не могут быть найдены с нулевым значением

Я пытался реализовать Spring Security в течение нескольких дней и боролся с csrf tokens,

Я отладил в CsrfRequestDataValueProcessor и обнаружил, что следующая строка возвращает ноль.

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: "_csrf.parameterName" (loginsample:19)] с первопричиной org.springframework.expression.spel.SpelEvaluationException: (100): свойство или поле 'имя_параметра' не может быть найдено на нуле

Почему это может быть?

1 ответ

Вы используете конфигурацию Java или XML? Если XML, убедитесь, что вы включили токен csrf:

<http> ... <csrf /> </http>

Вам также может понадобиться импортировать JSP taglib: Импортировать теги безопасности:

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

затем добавьте это в голову:

<sec:csrfMetaTags /> 

Возможно, вам придется импортировать зависимость taglib.

Другие вопросы по тегам