设想
- 我重新启动服务器和浏览器,所以没有会话数据。
- 我去 www.someurl.com 公共访问页面。我的控制器让我与这个会话
HttpSession session=request.getSession(true);
- 我单击指向 www.someurl.com/admin 受限访问页面的平面锚链接,该页面在新选项卡中打开。Spring Security 3 拦截了这一点并挑战凭据。我登录成功。
- 我使用 www.someurl.com 返回上一个选项卡并刷新页面。
问题
我在 www.someurl.com 的控制器中注意到的是,第 2 步和第 4 步的会话 ID 不同。看起来 Spring Security 创建了一个新会话,并且该会话现在附加到公共页面的请求。为什么会发生这种情况,我可以强制 Spring Security 使用现有会话吗?
追踪场景
- 重新启动浏览器和服务器,以便不存在会话数据。
- 我去 www.someurl.com。控制器已注入请求。request.session 为空。getSession(true) 让我获得一个 ID 为 87B091B12F38D44C53AF0DA9E2147484 的会话。LogService 获取请求对象并执行 getSession(true) 但获取 ID 为 87B091B12F38D44C53AF0DA9E2147484 的会话,所以到目前为止一切都很好。
- 我点击/管理员。页面在新标签页中打开。我登录。
- 我刷新了 www.someurl.com。控制器已注入请求。request.session 不为空。会话 ID 为 547DF59035C91783D783BAEF4A15FBFF。