gpt4 book ai didi

tomcat - session 混淆 - apache httpd 与 mod_jk、tomcat、spring security - 服务其他用户的数据

转载 作者:行者123 更新时间:2023-11-28 21:48:12 25 4
gpt4 key购买 nike

最近我们遇到了一个严重的问题,一个用户得到了另一个用户的数据。这个问题几乎不可能重现。

我们正在使用 Spring-security 提供的标准登录用户管理,我们确信问题不在于将用户存储在实例变量或我们应用程序中的类似并发内容中。

我们很怀疑是SpringSecurity还是Tomcat本身的问题。

我们的前端服务器是 apache httpd,通过 ajp 连接器 (mod_jk) 连接到 tomcat。我们没有做任何负载平衡(httpd 只关心 SSL,一些 url 重写和服务一些 php 模块)

这是我们的设置:

## OS
OS Name: Linux
OS Version: 2.6.32-5-686
Architecture: i386

## Apache httpd
Server version: Apache/2.2.16 (Debian)
Server built: Sep 4 2011 20:27:42

## mod_jk
mod_jk/1.2.30 (installed via apt-get)

## JVM
JVM Version: 1.6.0_18-b18
JVM Vendor: Sun Microsystems Inc.

## Tomcat
Server version: Apache Tomcat/6.0.28
Server built: February 12 2011 1443

我们将此 session 中的 httpd/mod_jk 混淆,因此我们唯一的解决方案是删除 apache httpd。但在我们离开这个流行和广泛使用的配置之前,我们想知道是否有人遇到过类似的问题。

我发现的唯一类似问题是在负载平衡或 mod_jk 中。

你遇到过类似的问题吗?任何提示、想法、链接或经验都将受到高度赞赏。谢谢!

最佳答案

其中一个可能的问题可能是第二次登录尝试。考虑以下情况:

  • 用户打开两个带有两个登录表单的浏览器选项卡。
  • 选项卡 1:以 user_1 身份登录。将一些数据加载到 HTTP session 中。
  • 选项卡 2:以 user_2 身份登录。将一些数据加载到 HTTP session 中。

在大多数浏览器中,这将是同一个 HTTP session 。所以实际上您会将来自 user_1 和 user_2 的数据组合在一个 HTTP session 中。任何使用 session 对象的页面都可能受到影响。

这里有两个选择:

  • 防止这种情况。检测第二次登录尝试并要求用户先注销。使用 Spring Security 很容易,请参阅下面的代码。
  • 如果您绝对需要每个浏览器选项卡一个帐户,那么您可以将 session 数据存储在每个用户名的映射中。

感谢 Concurrent Session Control,您可以防止第二次登录尝试特点:

<http>
...
<session-management>
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
</http>

它已经在您的应用程序中完成了吗?

关于tomcat - session 混淆 - apache httpd 与 mod_jk、tomcat、spring security - 服务其他用户的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com