如何在登录时获取csrf令牌?

问题描述 投票:0回答:2

使用Spring Security,我的理解是,您在GET上获取了csrf令牌,然后将其包含在任何后续POST,PUT,DELETE请求的标头中。但是登录是POST!那么,如何获取csrf令牌以便将其包含在登录请求的标头中?

我不想为登录路由禁用csrf。

java spring-security postman
2个回答
0
投票

如果使用springboot,则CsrfRequestDataValueProcessor将自动将csrf令牌添加到响应中。默认情况下,Springboot不会为GET添加csrf令牌,但会为POST添加它,因为它会修改状态。要在jsp中使用令牌,例如:

<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>

加载表单后,springboot将通过后处理器自动为csrf令牌注入值。如果要在ajax调用中使用csrf令牌,则必须通过检查DOM来获取csrf令牌,然后将其手动添加到您的ajax请求中:

$(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);
  });
});

注意:这两个示例均来自文档本身。

官方doc


0
投票

登录时不需要csrf。您已经通过用户名和密码授权。您可以在设置中忽略该路径

© www.soinside.com 2019 - 2024. All rights reserved.