HTTP 状态 403 - 预期的 CSRF 令牌未 found.Has session 已过期?

HTTP Status 403 - Expected CSRF token not found.Has session expired?

我有一个 Spring MVC 应用程序,视图层是 jsp based.At 次我收到此错误消息并且此消息是真实的,session 确实 expired.If 我再次登录,一切正常。 我正在使用以下机制发送 CSRF 令牌: 在 head 部分添加了 2 个元标记:

<meta name="_csrf" content="${_csrf.token}" /> 
<meta name="_csrf_header" content="${_csrf.headerName}" />

在每个 Ajax 调用中,检索令牌和 header:

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");

然后使用 XMLHttpRequest 发送此 header 和令牌:

$.ajax({
        type : "GET",
        url : xxx,

        beforeSend : function(xhr) {
            xhr.setRequestHeader(header, token);
        },
        complete : function() {
        },
        success : function(response) {
        }       
});

这就是大多数 jsp pages.I 尝试在警报消息中捕获令牌的方式,并且它有效。如果 session 已过期,我想将用户重定向到登录页面,该页面将显示用户被重定向的原因。怎么办?

在服务器端 Spring 我们使用了基于 xml 的配置:

<http auto-config="true"  use-expressions="true">
  ...
  <csrf/>
</http>

我在 application-security.xml 中添加了以下内容,它解决了这个特定场景的问题,尽管我在其他一些场景中遇到 CSRF 异常:

<http auto-config="true"  use-expressions="true">
...

<session-management invalid-session-url="/login">
        <concurrency-control expired-url="/login" />
    </session-management>
</http>