【问题标题】:Spring Security 2 userdetail in one session一个会话中的 Spring Security 2 用户详细信息
【发布时间】:2014-03-16 13:25:19
【问题描述】:

我正在做一个网络项目。其中一项要求是能够在一个浏览器中登录 2 个不同的用户帐户。

例如,如果我登录了 www.myproject.com/member 并打开一个新选项卡并说这次我在管理员 www.myproject.com/admin 中再次登录。现在,如果我尝试访问我的一些用户功能,比如 www.myproject.com/member/user-detail,我会收到拒绝访问的响应。我理解为什么,因为 spring security 一次只保存 1 个用户详细信息。我想要的是在一个浏览器中登录具有不同角色的多个帐户。

现在你知道如何解决这个问题了吗?

已编辑:

只要登录的用户具有不同的角色,我希望能够在多个浏览器选项卡上登录。

【问题讨论】:

  • 打开一个新的私人窗口;)
  • 说真的,这是怎么解决的?
  • 问题是:你将如何处理哪个请求属于哪个用户?您必须编写一个完整的自定义实现。我认为这是一个非常糟糕的主意。这将不再通过示例起作用:SecurityContextHolder.getContext().getAuthentication();为什么会有这样的要求?
  • 是的,我知道它不会像我尝试过的那样工作。老实说,我不知道这就是我在这里问的原因。但我认为这是可能的。一个完美的例子是 Gmail,您可以在 1 个浏览器中登录 2 个不同的帐户。所以我想这里有一个工作。

标签: spring spring-mvc spring-security


【解决方案1】:

对于将安全令牌存储在单个 cookie 中的站点,您看到一个选项卡退出另一个选项卡的行为是正常的。这是由于 spring security cookie 是按域名和登录路径(类似于www.myproject.com/login)存储的。

要查看此内容,请使用 Chrome 调试器或 Firebug 查看应用程序的 cookie。

大多数网络应用程序的行为都是这样的,以 gmail 为例,直到不久前,它具有完全相同的行为:登录一个标签页,然后注销另一个标签页上的不同用户。

这在 gmail 最近发生了变化,这意味着他们不再像 spring security 那样将安全令牌存储在单个 cookie 中。他们不太可能在 Javascript 中公开安全令牌,它仍应位于 HttpOnly cookie 中。可能在每个请求中都会填写一个请求标头,供用户考虑。

因此,在 Web 应用程序中,每个选项卡可以有不同的登录名,但是 spring security 目前不支持开箱即用。请参阅question 了解如何实现它的一些想法。

【讨论】:

  • 我读过这个帖子,和我的问题很相似。 [链接] (forum.spring.io/forum/spring-projects/security/…)。我还没有尝试过spring webflow,所以我尝试在文档上做一些阅读,但我看不到如何使用它来解决我的问题。
猜你喜欢
  • 2012-05-23
  • 2013-07-23
  • 2019-01-01
  • 2017-06-05
  • 2011-01-30
  • 1970-01-01
  • 2021-09-09
  • 2020-08-28
  • 2012-07-08
相关资源
最近更新 更多