登录用户';tomcat上grails spring security中的会话混淆

登录用户';tomcat上grails spring security中的会话混淆,tomcat,grails,spring-security,session-hijacking,Tomcat,Grails,Spring Security,Session Hijacking,我在grails中有一个应用程序,使用spring security进行用户和角色管理。 因为,在过去的几天里,我面临着一个奇怪的问题:当一个用户在某个点登录时,用户变成了另一个用户(会话混乱) 示例:用户A登录到系统,用户B从另一个浏览器登录到系统,当通过控制器动作移动时,在某个随机点,用户A成为用户A系统中的用户B,用户B也是如此 这个问题是在生产中,而不是在发展中 我在互联网上发现了一些类似的案例,但没有一个是grails。 ,但在jsf和前面提到的解决方案中,这个类似的方法似乎对我不起作

我在grails中有一个应用程序,使用spring security进行用户和角色管理。 因为,在过去的几天里,我面临着一个奇怪的问题:当一个用户在某个点登录时,用户变成了另一个用户(会话混乱)

示例:用户A登录到系统,用户B从另一个浏览器登录到系统,当通过控制器动作移动时,在某个随机点,用户A成为用户A系统中的用户B,用户B也是如此

这个问题是在生产中,而不是在发展中

我在互联网上发现了一些类似的案例,但没有一个是grails。 ,但在jsf和前面提到的解决方案中,这个类似的方法似乎对我不起作用。另一个是,但这里的问题似乎是因为mod_jk,这不是我的情况(我没有使用mod_jk)

我的系统版本:

  • Grails版本:3.2.4
  • Groovy版本:2.4.7
  • JVM版本:1.8.0_05
  • 服务器版本:ApacheTomcat/8.5.14
  • JVM版本:1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13

最后,我发现了问题。

罪魁祸首是ISP(目前在尼泊尔的Subisu和Mercantile发现)。 它们实际上会缓存请求的整个页面,当另一个用户在特定时间段(几个小时)内请求相同的url时,如果两个用户都在同一ISP网络中,缓存的页面将呈现给下一个用户

我如何发现我的问题: 我做了一个实验。首先,我和两个不同的用户在同一个ISP的不同计算机上登录,我立即发现了问题。 然后我注销了该ISP中的一个用户,断开了与该ISP的连接,连接到另一个ISP并登录到该系统。 现在,我在ISP1中的Computer1中有User1,在ISP2中的Computer2中有User2,即使在浏览了半个小时后也没有发现问题

我是如何修复的: 我生成了唯一的uuid并附加到每个菜单链接。这使得每个url都不一样,已经有4天了,问题甚至一次都没有发现。
在某些菜单中,我没有放置唯一的uuid,但问题仍然存在,但在那些我放置唯一字符串的菜单中,我没有放置唯一的uuid和问题。

关键在于ISP。他们的基础设施中的一些东西,比如web代理或者其他什么。但是,ISP真的会影响spring security跟踪的用户会话吗?因为我对页面重定向或任何类似的问题都没有意见,但我认为会话是由spring security和tomcat维护的用于将浏览器与会话关联的会话在请求通过ISP传输到服务器之前的某个位置交换/更改。您是否尝试过使用HTTPS和安全cookie?也许这样做可以防止这种情况。哇,这是一些非常可怕的ISP行为。