【发布时间】:2018-01-14 08:45:15
【问题描述】:
我正在从 struts 迁移到 spring 迁移。由于我正在开发最新的春季版本 4.3,我们决定为我们的应用程序使用 CSRF 保护。在我们的 JSP 页面上,我们有两个选项卡都可以通过 http get 方法单击以调用 spring 控制器。每个选项卡都有多个链接和按钮。在获取调用之后,如果我在页面上执行任何操作,例如单击一个按钮,该按钮会发布对控制器的调用。我收到 403 禁止消息“未找到预期的 CSRF 令牌。您的会话是否已过期?” .
在 Firefox 开发人员工具发布调用表单数据中,我可以看到带有令牌的 _csrf 正在传递。响应标头说 x-frame-opitons: Deny。我怀疑上一个调用 HTTP GET 是在选择导致问题的选项卡时。我们是否也需要为 http GET 方法传递 csrf 令牌?有什么帮助吗?
【问题讨论】:
-
您可能需要共享一些代码,因为您的要求不是很清楚。首先,不,您当然不需要通过 GET 请求发送 CSRF 令牌,但是当控制器处理 GET 请求时,将生成一个新的 CSRF 令牌,这是 Spring Security 期望接收的以下帖子。在 GET 之后显示的页面中,您是否仍然看到 CSRF 令牌,它是否已更新?在 GET 之前和之后,您应该会在浏览器中看到不同的 CSRF 令牌值。
-
在 GET 调用之后我得到了相同的 csrf 令牌。实际上,我并没有编写任何新代码来读取响应。我使用的是 spring mvc
标签: spring spring-mvc spring-security csrf