繁体   English   中英

具有Spring Security的应用程序是否在其中共享SecurityContextHolder

[英]Do applications with spring security share SecurityContextHolder among them

我有两个不同的应用程序,说A和。 两者都使用具有相同配置的Spring Security。 这是我的情况:

我登录到我的A应用程序。 一切正常。 但是,当我在同一浏览器的另一个选项卡中登录我的B应用程序(它具有相同的IP但不同的PORT)时,我看到了以下几行(下面),并且我离开了A应用程序,这意味着我不再通过身份验证它。

DEBUG 2013-05-20 13:42:43,969 [http-8080-2] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain:/webapp/backoffice/index.jsp在其他过滤器链中的12的位置2; 触发过滤器:“ SecurityContextPersistenceFilter”

DEBUG 2013-05-20 13:42:43,969 [http-8080-2] org.springframework.security.web.context.HttpSessionSecurityContextRepository:当前不存在HttpSession

DEBUG 2013-05-20 13:42:43,969 [http-8080-2] org.springframework.security.web.context.HttpSessionSecurityContextRepository:HttpSession中没有SecurityContext:空。 将创建一个新的。

  1. 我正在使用HttpSessionSecurityContextRepository作为SecurityContextRepository
  2. 为了安全起见,我已启用SessionMigration
  3. 我正在使用ConcurrentSessionFilter ,以防止某人通过两个或更多设备登录。

但是我不明白为什么登录我的B应用程序,从A应用程序中删除HttpSession? (或者可能正在发生其他事情)

我想知道这些应用程序是否在浏览器中共享某些共同点。


当我被问到它们的IP / PORT时,您应该知道它们的IP是相同的(都是localhost),但是它们具有不同的端口。
A) 本地主机:8080 / DTTS /后台
B) 本地主机:8081 / dtts / backoffice
解决了
问题在于,对于每个URL/Path都有一个唯一的JSESSIONID 我的两个应用程序都使用URL:localhostPath:dtts 这就是第二个JSESSIONID替换第一个JSESSIONID的原因。

来自应用程序B的cookie正在覆盖存储在应用程序A的浏览器中的cookie,因为这两个cookie均来自同一服务器,即“ localhost”,并且两个cookie均具有名称,即“ JSESSIONID”。

Cookies不是特定于端口的。 在以下问题中对此进行了讨论: HTTP cookie端口是否特定?

我相信您的选择是:

  • 使用不同的IP或服务器名称访问每个应用程序(例如localhost和127.0.0.1或applicationA.mydomain.com和applicationB.mydomain.com)
  • 为每个应用程序在其中运行的容器中的会话cookie使用不同的名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM