来自会话的spring csrf令牌

时间:2017-08-23 03:38:36

标签: spring spring-mvc

您好我使用的是Spring MVC 4.3版本。我们使用Spring CSRF功能。 springSecurityFilterChain中定义的web.xml将确保通过CSRFFilter课程。据我所知,Spring在会话中存储了csrf标记。

我创建了一个接受HTTP GET调用的控制器方法。这是我的应用程序中的第一个方法。我第一次尝试从会话中访问令牌时,我正在获取null。我尝试了以下request.getAttribute("_csrf")调用返回null的可能性。为什么我从会话中获得null?可以使用请求属性吗?

HttpSession session = objHttpRequest.getSession(false);
HttpSessionCsrfTokenRepository sessionToken = neWHttpSessionCsrfTokenRepository();
System.out.println("HttpSessionCsrfTokenRepository  token = " + sessionToken.loadToken(objHttpRequest));  // Returned **null**

CsrfToken token = (CsrfToken) session.getAttribute("org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN");
System.out.println(">>>>> session token  "+ token); // Returned **null**

token = (CsrfToken)objHttpRequest.getAttribute("_csrf");
System.out.println(">>>>> request token  "+ token); // Returned token value

1 个答案:

答案 0 :(得分:0)

使用会话要非常小心。 会话属性按照说明进行设置。但它是在用户交互的持续时间。所以你在服务器端没有任何迹象表明它来自哪里。所以"坏人"代码可以简单地骑在你的会话上,支票会认为没问题。 令牌必须是提交的表单数据的一部分或作为标题的一部分。