2

Я пытался реализовать Spring Security в течение нескольких дней и боролся с csrf tokens.Spring Security Producing Null CSRF Token - свойство или поле «параметрName» не найдено на нуле

Я отлаживал до 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: «_csrf.parameterName» (loginsample: 19)] с основной причиной org.springframework.expression.spel.SpelEvaluationException: EL1007E: (pos 0): свойство или поле «parameterName» не найден на нуле

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

+0

Вы используете пружинную защиту 4? – smoggers

+0

Как вы создаете токен csrf? – kTT

ответ

0

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

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

Вы также, возможно, потребуется импортировать JSP TagLib: Импорт метки безопасности:

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

затем добавить это в голову, как скважина:

<sec:csrfMetaTags /> 

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

Смежные вопросы