使用Spring Security,我的理解是,您在GET上获取了csrf令牌,然后将其包含在任何后续POST,PUT,DELETE请求的标头中。但是登录是POST!那么,如何获取csrf令牌以便将其包含在登录请求的标头中?
我不想为登录路由禁用csrf。
答案 0 :(得分:1)
登录时不需要csrf。您已经通过用户名和密码授权。您可以在设置中忽略该路径
答案 1 :(得分: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。