1

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

我登录我的A应用程序。一切正常。但是当我在同一个浏览器的另一个选项卡中登录我的B应用程序(它具有相同的 IP 但不同的端口)时,我看到这些行(如下)并且我被从A应用程序中丢弃,这意味着我不再在其中进行身份验证。

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

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

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

  1. HttpSessionSecurityContextRepository用作SecurityContextRepository
  2. 出于安全目的,我启用了SessionMigration 。
  3. 我正在使用ConcurrentSessionFilter,以防止有人通过两个或更多设备登录。

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

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


当我被问及他们的 IP/PORT 时,您应该知道他们的 IP 是相同的(都是 localhost),但它们有不同的端口。
A) 本地主机:8080/dtts/后台
B) 本地主机:8081/dtts/后台
解决
了问题是每个URL/Path人都会有一个独特的JSESSIONID. 我的两个应用程序都使用URL:localhostPath:dtts. 这就是为什么第二个JSESSIONID取代第一个。

4

1 回答 1

2

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

Cookie 不是特定于端口的。这在这个问题中进行了讨论:Are HTTP cookies port specific?

我相信您的选择是:

  • 使用不同的 IP 或服务器名称来访问每个应用程序(例如 localhost 和 127.0.0.1,或 applicationA.mydomain.com 和 applicationB.mydomain.com)
  • 在运行每个应用程序的容器中为会话 cookie 使用不同的名称
于 2013-05-23T13:23:28.927 回答