встроенный метод для получения токена csrf - PullRequest
0 голосов
/ 01 марта 2019

Я включил csrf в Spring Security 3.2.9.RELEASE .Я нашел в Интернете следующие варианты получения токена csrf:

include token - заголовки ответа 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 уже закодированы /встроенный (к весне), за исключением этого, как получить токен.Я чувствую, что что-то упустил.

1 Ответ

0 голосов
/ 01 марта 2019
Модуль

spring-security-web позволяет получить доступ к токену CSRF в представлении, ссылаясь на параметр $_csrf.Согласно 6.4.3.Включите документацию CSRF Token , это можно сделать как часть отправки формы:

<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);
  });
});
...