0

我最近面临登录后最后一个请求 url 的问题。通常,一切正常。但是,如果我继续执行以下程序,我会遇到麻烦:

  1. 在一个选项卡中打开一个应用程序并登录
  2. 在此选项卡中,我会定期向服务器发出 AJAX 请求
  3. 使用该应用打开一个新标签页(我仍处于登录状态)
  4. 在此选项卡中,我注销
  5. 同时,来自第一个选项卡的 AJAX 请求使用 HTTP 401 自动进行(因为我已经注销)
  6. 当我尝试在第二个选项卡中再次登录时,我从第一个选项卡收到 AJAX 请求的 JSON,因为它是最后一个请求。

我怀疑 Spring Security 会忽略“最后一个请求 url”的 AJAX 请求。是否可以将其设置在某个地方?或者有什么好的解决方法吗?

谢谢,马特奥

4

1 回答 1

2

我认为没有一种通用的方法可以将 ajax 请求与用户浏览浏览器发起的“常规”请求区分开来。如果您可以在您的应用程序中区分它们(例如,通过将 ajax 请求映射到可以与某些模式匹配的特定 url),您可以轻松实现您正在寻找的内容。(编辑:Sérgio 在他的以下评论中建议了一种更简单的识别 ajax 请求的方法。)

成功登录后负责执行重定向的组件是SavedRequestAwareAuthenticationSuccessHandler,因此自定义框架默认行为的一种可能方法是提供您自己的AuthenticationSuccessHandler,并将其注入UsernamePasswordAuthenticationFilter. 应该可以RequestCache在您的类中自动装配,并决定是否要重播最后一个缓存的请求,或者在已知它是 ajax 请求的情况下忽略它。

于 2013-05-13T12:52:42.950 回答