gpt4 book ai didi

jquery - session 超时后,对第一个请求的后续 AJAX post 请求将抛出 InvalidCsrfTokenException

转载 作者:行者123 更新时间:2023-12-01 05:23:21 24 4
gpt4 key购买 nike

拜托,我不知道如何最好地构造这个问题。请允许我解释一下这个问题。

在我的网络应用程序上,我有一个页面,在其中使用基于 AJAX 的发布请求对数据库中的记录进行分页。可以对检索到的记录集进行更改,并且仍然可以通过基于 AJAX 的发布请求进行更新。由于每个请求中都会传递敏感信息,这些请求的类型为 post。

问题

如果用户登录时选中了“记住我”。在AJAX分页页面上,如果用户在 session 超时后第一次单击“下一步”按钮检索新的记录集,则运行成功。然后,如果用户再次单击“下一步”按钮来检索另一组记录,将引发 InvalidCsrfTokenException ,导致我的自定义 AccessDeniedHandler 将用户重定向到登录页面。我不希望用户被重定向到登录,而是请求应该成功,因为尽管 HTTP session 已过期,记住我 cookie 仍然有效。
我注意到,当 session 超时后发出第一个 AJAX 请求时,一个新的 token 值被分配给 X-XSRF-TOKEN。随后的 ajax 请求(第二个 AJAX 请求)会抛出 InvalidCsrfTokenException,因为新的 token 值不再与页面上之前的 CSRF 值(即 sec:csrfMetaTags)匹配。不会更新,因为请求是基于 AJAX 的。

那么,如何在 AJAX 请求上更新页面 CSRF 值(即 sec:csrfMetaTags)以匹配 X-XSRF-TOKEN 值? spring 有开箱即用的解决方案吗?如果没有,任何更好的方法来解决这个问题将不胜感激。谢谢。

最佳答案

如果我正确理解你的问题,你可以使用 Spring security Taglib 将 CSRF token 放入元标记中。这会给您带来一个问题,因为这只在页面呈现时执行一次。

当 session 超时时,AJAX 请求出现问题是很常见的,特别是在涉及安全时。

我们通常通过确保 session 不会终止来解决这个问题。这个做完了通过让前端开发人员可以调用一个端点,该端点会刷新 session 并告诉他 session 何时过期。每次 session 接近到期时,前端都会调用此端点。如果用户计算机进入待机状态,并且 session 在关闭时过期,则前端在重新启动时会知道这一点,并且会重新加载页面,以便您可以获得新的 CSRF token 。如果您使用良好的生根框架或本地存储,您可以避免丢失用户的状态。

我建议不要尝试构建任何解决方法来避免页面重新加载。我见过开发人员构建一个返回当前 CSRF token 的端点,然后使用 JavaScript 更新元 header 以避免重新加载页面。这当然是一个非常糟糕的主意,因为黑客也可以使用端点来获取 token 。始终要小心安全性,即使是大公司也会被黑客攻击,这是有原因的,安全性并不像看起来那么简单。

关于jquery - session 超时后,对第一个请求的后续 AJAX post 请求将抛出 InvalidCsrfTokenException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com