Я включил csrf в Spring Security 3.2.9.РЕЛИЗ. Я нашел в Интернете следующие варианты получения токена csrf:
включить токен - это заголовки ответов http
ИЛИ
вручную создать GET API, чтобы получить его
@RequestMapping(method = RequestMethod.GET, value = "/csrf")
public @ResponseBody String retrieveCsrfToken(HttpServletRequest request) throws Exception {
if (null != request.getSession(false)) {
System.out.println("session exist ");
}
CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
return token.getToken();
}
Нет ли встроенного механизма для его извлечения?
Каков предполагаемый способ получения токена по умолчанию?
Все остальные функции csrf уже закодированы/встроены (к весне), за исключением этой части того, как получить токен. Я чувствую, что что-то упускаю.




Модуль spring-security-web позволяет получить доступ к токену CSRF в представлении, ссылаясь на параметр $_csrf. В соответствии с 6.4.3. Включите документы токена CSRF это можно сделать как часть отправки формы:
<input type = "hidden" name = "${_csrf.parameterName}" value = "${_csrf.token}"/>
или сохранить в теге <meta>:
<meta name = "_csrf" content = "${_csrf.token}"/>
<meta name = "_csrf_header" content = "${_csrf.headerName}"/>
для дальнейшего чтения через JavaScript:
$(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);
});
});