2017-02-11 6 views
1

Я пытаюсь отправить скрытый элемент формы из .js-файла, поэтому он переходит к контроллеру, и между ними исключается исключение CSRF-токена.Значок CSRF требуется в Spring 4.x

$(document.body).append(form); 
      $(form).attr("action", "/controller_path"); 
      $(form).attr("method", "POST"); 
      var input = $("<input>").attr("type", "hidden").attr("name","payment_prim_customer").val(payment_prim_customer); 

      $(form).append($(input)); 
      $(form).submit(); 

, пожалуйста, предложите, как с этим справиться?

CSRF маркер добавляется в моем файле .jsp

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 

ответ

1

Включите маркер CSRF в пределах мета-теги.

<html> 
<head> 
    <meta name="_csrf" content="${_csrf.token}"/> 
    <!-- default header name is X-CSRF-TOKEN --> 
    <meta name="_csrf_header" content="${_csrf.headerName}"/> 
    <!-- ... --> 
</head> 

И, наконец, попробовать с этим:

$(document.body).append(form); 
$(form).attr("action", "/controller_path"); 
$(form).attr("method", "POST"); 
var input = $("<input>").attr("type", "hidden").attr("name","payment_prim_customer").val(payment_prim_customer); 
$(form).append($(input)); 

var token = $("meta[name='_csrf']").attr("content"); 
var header = $("meta[name='_csrf_header']").attr("content"); 
var csrf_input = $("<input>").attr("type", "hidden").attr("name",'_csrf').val(token); 
$(form).append($(csrf_input)); 

$(form).submit(); 
0

Потому что вы используете его из Js, Вы, вероятно, нужно использовать csrfTokenRepository и затем извлечь значение из печенья. Вы можете добавить что-то подобное в вашей конфигурации:

.and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()); 

А затем получить маркер из печенья с именем X-XSRF-ЗНАК

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