原因
访问WEB服务,会在浏览器的cookie里保存一部分登录信息,用于保持连接状态,springboot有默认的cookie名称,同一个浏览器访问同一服务器的多个WEB服务,要保存的cookie名称相同,登录其中一个,会覆盖掉之前的cookie,因而产生上述现象,给WEB服务设置独特的cookie名称即可解决。
发现问题是因为:IP相同认为是同一个域,接收了其他系统的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成manage-auth的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问manage-auth,再访问其他系统的时候,其他系统的sessionid会覆盖manage-auth的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP或域名。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。
解决方法:
方法1:将不同的多个应用服务在不同的虚拟主机中,或者映射不同的IP进行部署。
方法2: 修改每个springboot WEB工程的 application.properties 文件中的 server.session.cookie.name 属性(如没有该属性,则新建),使该服务器内部署的所有WEB工程的 server.session.cookie.name 各不相同即可。
需要注意springboot2.0之前的版本是server.session.cookie.name,而2.0之后改为了server.servlet.session.cookie.name,此处为一个坑。
方法3:为不同项目配置域名,通过域名访问即可解决session冲突。
注:
https://blog.csdn.net/ljl890705/article/details/70570675
https://lihaiming.iteye.com/blog/2258160
//www.greatytc.com/p/896800ce6822
//www.greatytc.com/p/67f0d42f82be