Cookies 同时使用两个spring启动应用程序时注销一个spring应用程序
我有两个spring启动应用程序Cookies 同时使用两个spring启动应用程序时注销一个spring应用程序,cookies,spring-boot,spring-security,port,jsessionid,Cookies,Spring Boot,Spring Security,Port,Jsessionid,我有两个spring启动应用程序 模块1在端口8080上运行 模块2在端口9090上运行 我已在application.properties文件中使用此属性设置端口 server.port=${port:9090} 这两个模块都有/login、/signup,可以通过下面的代码进行访问,而无需验证 http.authorizeRequests() .antMatchers("/signup", "/login").permitAll() 任何其他请求都要求对用户进
- 模块1在端口8080上运行
- 模块2在端口9090上运行
server.port=${port:9090}
这两个模块都有/login、/signup,可以通过下面的代码进行访问,而无需验证
http.authorizeRequests()
.antMatchers("/signup", "/login").permitAll()
任何其他请求都要求对用户进行身份验证
如果我一次使用一个模块,就不会有问题
但是,如果试图在同一时间来回使用它们,那么问题是每次使用另一个应用程序时,我都必须再次登录到上一个应用程序。
例如
但必须有一个解决方案,这样我就不必每次切换应用程序时都登录。您需要为这两个应用程序使用不同的cookie名称 有不同的方法可以实现这些,对于版本>=1.3的spring引导应用程序,最简单的方法就是设置一个属性:
server.session.cookie.name = MYSESSIONID
其他方法在本文中有所描述。将您的应用程序映射到不同的上下文路径,因此
JSESSIONID
cookies将是独立的;否则,cookie用于相同的上下文,因此两个应用程序实际上只有一个cookie。另一个解决方案是使用不同的主机
请注意,在这里您不仅要更改cookie的上下文路径:若您更改应用程序的上下文路径,Servlet API实现将为您处理cookie上下文路径的更改
我已经尝试过使用相同的主机和不同的上下文路径
我目前正在启动两个应用程序,它们都以ServletAPI为基础(JSessionIDCookie由ServletAPI的会话机制定义)。这两个应用程序都在本地主机、不同端口和不同上下文(/app1和/app2)上运行。我已经登录了这两个应用程序,在Chrome列出cookies的对话框中,我可以看到两个JSESSIONID cookies:一个用于localhost
和/app1
,另一个用于localhost
和/app2
然后我在/app2中注销。它的JSESSIONID被销毁并用不同的内容重新创建(因为我再次被重定向到登录页面)。(请注意,要查看该更改,我必须关闭Cookies对话框并重新打开它,因为Chrome没有动态更新它)。同时,属于/app1的JSESSIONID cookie是完整的,我可以继续在/app1中工作(因此我没有从中注销)
更新
再做一次实验。我已在同一上下文(/app1)中映射了这两个应用程序。它们在localhost:8084和localhost:8085上运行。我做了以下工作:
将您的应用程序映射到不同的上下文路径,因此JSESSIONID cookies将是独立的;否则,cookie用于相同的上下文,因此两个应用程序实际上只有一个cookie。另一个解决方案是使用不同的主机。@dur它的localhost:8080/和localhost:9090/@RomanPuchkovskiy使用不同的上下文路径真的能解决问题吗?因为在我发布的链接中,它说cookie是在域级别(即localhost)上指定的,cookie绑定到主机+上下文路径对,所以如果上下文对不同(并且每个应用程序正确设置了cookie路径),那么这将是两个不同的独立cookie,即使主机是相同的。@Roman我已经将Stefan的答案标记为正确答案,因为它解决了问题。这不意味着localhost:8080和localhost:9090是两个不同的主机吗?创建两个不同的上下文路径?@dur,你说得对,更改cookie路径也是一个选项