我正在尝试解决问题。用户使用 CAS SSO 登录到应用程序。该用户登录到另一个用户的帐户 - 通常是几秒钟前登录的用户帐户。有没有人知道为什么会发生这种情况以及如何解决?
我们确实采用了临时解决方法,即每周以轮流方式反弹一次网络服务器,以清除所有 session 。这似乎可以防止它每次都到达发生此问题的地步。当然,我们不希望将此作为永久解决方案。
此系统运行 Apache Tomcat 8.0.15 和 CAS 3.6 版
我们即将将 Tomcat 升级到 8.5.35,也许这会修复它,但我们更喜欢证明这一点。到目前为止,我们还没有在发行说明或错误修复中发现任何我们认为与我们所看到的问题完全匹配的内容。因此,我们此时也不排除可能的配置错误。
因此,如果有人对原因有任何建议,或者更好的是之前看过这个并且知道是什么解决了它,请分享。
我们发现的错误信息如下:
05-Dec-2018 13:51:07.477 严重 [catalina-exec-149] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [cas] 在上下文中与路径 [/cas]抛出异常[请求处理失败;嵌套异常是 java.lang.NullPointerException] 的根本原因
java.lang.NullPointerException
在我们看来,它无法再获取 sessionID,它不会不允许新 session ,而是会重复使用以前的事件 sessionID。听起来像是一个错误,但同样没有找到明确的证据证明它在我们正在升级的版本中得到修复。
下面是一个用户的访问日志中的条目,该用户的 jsessionid 被重用导致未经授权的访问。以下日志中的 IP 和其他可识别信息已被故意更改。
请看两个不同的 IP 如何都收到相同的 sessionID
185.226.72.189 5D508C736DFACC38B405A5F9B2C61BBC - [11/Dec/2018:18:07:00 -0500] GET/cas/login?service=https%3A%2F%2Fsed.instructure.com% 2Flogin%2Fcas HTTP/1.1 200 5831 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 -
- c-97-98-201-15.hsd1.ca.comcast.net 5D508C736DFACC38B405A5F9B2C61BBC - [11/Dec/2018:18:07:04 -0500] POST/cas/login; jsessionid=5D508C736DFACC38B405A5F9B2C61BBC?service=https%3A%2F%2Fsed.instructure.com%2Flogin%2Fcas HTTP/1.1 302 - https://cas.mydomain.com/cas/login?service=https%3A%2F%2Fsed.instructure.com%2Flogin%2Fcas Mozilla/5.0(Windows NT 10.0;Win64;x64)
在此先感谢您的帮助。
最佳答案
我的猜测是,在路径的某处,在任何一侧都有一个过度急切的缓存反向代理。你没有提到它,但大多数时候我看到这种情况,就是这个原因。
可以肯定的是:Tomcat 8.0.15 已于 4 年前发布,而 Tomcat 8.0 已达到其 end of life。 2018 年 6 月 - 您可能还想确保获得所有安全修复程序并更新到 8.5 或 9.0,尤其是当您在这里询问安全问题时。
关于Tomcat - 多个用户获得相同的 sessionID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53765825/