Если CSRF
включен, вы должны включить _csrf
.token на страницу, которую хотите войти или выйти из системы. В вашем login.jsp
я не вижу того, что включено, что может вызвать проблему.
Из официального документа следующие два способа добавить заголовок csrf:
В вашем JSP вы можете включить его в свою форму, как:
Если вы используете Spring MVC tag, CsrfToken
автоматически включается для вас с помощью
CsrfRequestDataValueProcessor.
<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"
method="post">
<input type="submit"
value="Log out" />
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
</form
Или, если вы предпочитаете использовать ajax для запроса, вы можете добавить заголовки csrf в запрос ajax вручную. В этом случае вы можете добавить токен csrf в качестве метатегов в html и использовать jquery или javascript для получения Ток из html, который будет добавлен в запрос ajax.
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
...
</head>
$(function () {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
});
Код выше взят из официальной документации.
Официальный документ