Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring security的应用程序是否在其中共享SecurityContextHolder_Java_Session_Spring Security_Httpsession - Fatal编程技术网

Java 使用spring security的应用程序是否在其中共享SecurityContextHolder

Java 使用spring security的应用程序是否在其中共享SecurityContextHolder,java,session,spring-security,httpsession,Java,Session,Spring Security,Httpsession,我有两个不同的应用程序,比如A和。两者都使用相同配置的Spring安全性。以下是我的情况: 我登录我的应用程序。一切正常。但是,当我在同一浏览器的另一个选项卡中登录到我的B应用程序(它具有相同的IP但不同的端口)时,我看到了这些行(如下),我被从A应用程序中丢弃,这意味着我不再在其中进行身份验证 调试2013-05-20 13:42:43969[http-8080-2]org.springframework.security.web.FilterChainProxy$VirtualFilterC

我有两个不同的应用程序,比如
A
和。两者都使用相同配置的Spring安全性。以下是我的情况:

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

调试2013-05-20 13:42:43969[http-8080-2]org.springframework.security.web.FilterChainProxy$VirtualFilterChain:/webapp/backoffice/index.jsp,位于附加过滤器链中12个位置中的第2个位置;正在启动筛选器:“SecurityContextPersistenceFilter”

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

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

  • 我正在使用
    HttpSessionSecurityContextRepository
    作为SecurityContextRepository
  • 出于安全目的,我已启用了会话迁移
  • 我正在使用ConcurrentSessionFilter,以防止有人通过两个或多个设备登录
  • 但是我不明白为什么登录我的
    B
    应用程序,会从
    A
    应用程序中删除HttpSession?(或者其他一些事情正在发生)

    我想知道这些应用程序是否在浏览器中共享一些共同点。
    当我被问及他们的IP/端口时,您应该知道他们的IP相同(都是本地主机),但有不同的端口。
    A)
    localhost:8080/dtts/backoffice
    B)
    localhost:8081/dtts/backoffice
    已解决

    问题是,对于每个
    URL/Path
    ,都会有一个唯一的
    JSESSIONID
    。我的两个应用程序都使用
    URL:localhost
    Path:dtts
    。这就是为什么第二个
    JSESSIONID
    替换第一个的原因。

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

    Cookie不是特定于端口的。本问题对此进行了讨论:

    我相信你的选择是:

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

    每个应用程序的IP地址和端口是否都不同?我建议使用Fiddler之类的工具来分析每个web应用程序的往返流量,特别是JSESSIONID cookies的内容。请提供a的URL并更新答案。它们的IP相同(都是
    localhost
    ),但它们有不同的端口(
    A
    使用8080,
    B
    使用8081),听起来很符合逻辑!如何为这些应用程序提供不同的会话cookie名称?如果使用tomcat 7,则是Context.XML中的sessionCookieName属性。请参阅此处的文档:我已经阅读了文档,文档中说将“JSESSIONID”名称更改为其他名称不是一个好主意,因为Servlet默认使用此名称。是的,如果在部署模型中可能的话,第一个选项当然是解决此问题的更好方法。它是特定于路径的,与端口无关。因此,对于每个
    URL/Path
    ,都将有一个唯一的
    JSESSIONID
    。我的问题是两个应用程序也使用相同的
    路径。