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