2017-04-22 209 views
1

我有两个弹簧启动应用程序。在同一时间使用两个弹簧启动应用程序时退出一个弹簧应用程序

  • 模块1端口上运行端口运行8080
  • 模块2 9090

我已经使用这个属性设置的端口application.properties文件

server.port=${port:9090} 

两个模块有/登录,/注册这些都可以通过下面的代码无需认证即可访问。

http.authorizeRequests() 
      .antMatchers("/signup", "/login").permitAll() 

任何其他请求都要求用户进行身份验证。

如果我使用一个模块在没有问题时,

但是,如果试图在同一时间使用它们来回那么问题是,我需要再次登录到每一次之前的应用我使用另一个。例如,

  1. 转到登录页面到Module - (页眉响应已设置JSESSIONID = XX)OK
  2. 登录到Module 1 - 确定
  3. 浏览受保护的内容在模块1 - OK
  4. 转到注册页面上的模块2 - (标头响应已设置JSESSIONID = YY)确定
  5. 尝试浏览到模块1的另一个安全内容 - 我需要再次登录

我敢肯定这是d对于由module2重置的jessionid。

Are HTTP cookies port specific? 我读过这篇文章,指出cookie不是端口特定的。

但必须有一个解决方案,以便我不必每次登录时都要登录应用程序。

+1

地图应用程序以不同的上下文路径,所以JSESSIONID饼干将是独立的;否则,Cookie是针对相同的上下文的,所以实际上这两个应用程序都有一个cookie。另一种解决方案是使用不同的主机。 –

+0

@dur它的本地主机:8080 /和本地主机:9090/ – user2049132

+0

@RomanPuchkovskiy并使用不同的contextpaths真正解决问题?因为在我发布的链接,它说,Cookie是在域级别(我指定的。e本地主机) – user2049132

回答

5

您需要为两个应用程序使用不同的cookie名称。

有不同的方法可以做到这些,最简单的一种,与版本> = 1.3弹簧启动应用程序只是设置一个属性:

server.session.cookie.name = MYSESSIONID 

其他方式在这个post描述。

+0

@dur,你是对的,更改cookie路径也是一个选项 –

1

将您的应用程序映射到不同的上下文路径,因此JSESSIONID Cookie将是独立的;否则,Cookie是针对相同的上下文的,所以实际上这两个应用程序都有一个cookie。另一种解决方案是使用不同的主机。

请注意,您不仅在此更改Cookie的上下文路径:如果更改应用程序的上下文路径,Servlet API实现将为您处理Cookie上下文路径更改。

我已经尝试了一点相同的主机和不同的上下文路径。

我目前有两个应用程序启动,都以Servlet API为基础(并且JSESSIONID cookie由Servlet API的会话机制定义)。这些应用程序都在本地主机上,不同端口上运行,并且具有不同的上下文(/ app1和/ app2)。我登录到两个应用程序,并在Chrome的对话框,其中列出饼干我可以看到两个JSESSIONID饼干:一个用于localhost/app1,另一个用于localhost/app2

然后我登出/ app2。它的JSESSIONID被销毁并用不同的内容重新创建(因为我已被重定向到登录页面)。 (请注意,为了看到这一变化,我不得不关闭Cookies对话框并重新打开它,因为Chrome并没有实时更新它)。同时,属于/ app1的JSESSIONID cookie完好无损,我可以在/ app1中继续工作(所以我没有从中注销)。

UPDATE

还有一个实验。我已经在同一个上下文中映射了两个应用程序(/ app1)。他们在localhost:8084和localhost:8085上运行。我做到以下几点:

  1. 我登录到第一个应用程序(端口8084)
  2. 我登录到第二个应用程序(8085端口)
  3. 我切换回第一个应用程序选项卡,单击任何链接,看到会话被破坏(因为我被重定向到登录页面)。

因此,即使应用程序在具有相同上下文路径的同一主机的不同端口上运行,它们也使用相同的cookie。基本上,这是在Are HTTP cookies port specific?说:Cookies不会通过端口提供隔离

一个小总结:

  1. 不同主机:没问题,饼干不同
  2. 不同的应用环境:无问题,饼干不同
  3. 相同的主机,相同的应用程序上下文,不同的端口:只有一个cookie的,这将导致冲突。

所以配方和以前一样:

  1. 或者使用不同的主机(即主机名,不包括港口)
  2. 或者使用不同的上下文路径
  3. 或(如其他回答提示)改变cookie的名称,以避免冲突
+0

这是一个很好的解决方案,用于在同一端口上运行的应用程序 – user2049132

相关问题