无法验证提供的CSRF令牌,因为找不到您的会话

时间:2016-08-11 02:06:27

标签: java spring spring-mvc spring-security

我一直在寻找这个问题,但仍然无法避免。 问题只有在我尝试进行ajax调用时才会出现。系统将返回错误git revert

基于Spring MVC and CSRF Integration,我需要包含@EnableWebSecurity来解决这个问题,如果我使用的是Java Config,但是如果使用XML,则需要使用它:

Could not verify the provided CSRF token because your session was not found.

而且我不确定如何使用上面的课程。

问题是如果它真的是一个解决方案或者我可以使用任何解决方案,如何使用上面的类?

这是我的安全配置xml文件;

@RestController
public class CsrfController {

    @RequestMapping("/csrf")
    public CsrfToken csrf(CsrfToken token) {
        return token;
    }
}

此外,我是一个类似于CA Siteminder的使用系统,它将根据没有登录表单的标题信息验证用户。

3 个答案:

答案 0 :(得分:1)

Spring需要在每个表单提交上发送csrf标记。为此,可以将以下代码插入JSP:

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

祝你好运

答案 1 :(得分:0)

这是答案!

好的,从其他问题来看,确实有相同的原因,主要是它会影响使用Restheader而没有表单登录的系统。这意味着webapp在容器系统中。因此,容器和系统在容器中的位置在客户端完全不同。

以下是示例..

对于容器webapp:

 www.myweb.com/main/

对于容器中的webapp:

www.myweb.com/main/child

这种不同将拒绝访问并给出403,因为我们正在查看的确不存在那里。

示例:

www.myweb.com/main/child/playground

/playground uri存在于那里,但肯定是禁止的:

www.myweb.com/main/playground

所以请检查你的uri并尝试确保你使用相对路径。它好多了。

P / s:出于某种原因,从服务器端调用的所有内容都保持完整,无论容器还是容器中的系统。这是因为服务器端使用相对路径,而不是绝对路径。

答案 2 :(得分:0)

我&#39; SO的新手,这是我的第一个答案,所以请耐心等待。 这是在使用jQuery时执行AJAX调用之前必须完成的事情:

$(document).ready(

        function() {

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

            $.ajaxSetup({
                headers : {
                    "X-CSRF-Token" : token
                }
            });

});