1

我使用 Java EE 编写了一个 Web 应用程序来更改表的内容。对于用户身份验证,我使用用户的数据库凭据。我正在使用这些凭据创建 JDBC 连接。

当两个或多个用户同时登录并且使用最新用户的凭据更新 Connection 对象时,就会出现问题。因此,无论是哪个用户进行了更改,最新用户 gt 的用户名都会登录到日志文件中,这是一个巨大的安全问题。

那么如何为多个用户创建多个 Connection 对象,以便进行修改的用户的唯一用户名出现在日志中。

4

2 回答 2

1

这听起来好像您将连接对象的引用存储在一个静态变量中,而在您的 Web 应用程序中只保留一个连接对象。取而代之的是,您可以使用HttpSession将用户特定的连接对象作为属性存储在用户的会话中。在用户第一次访问应用程序时将连接存储在那里,然后在每个后续请求中,取回连接检查它是否仍然有效并使用它。

也不要忘记在会话超时后关闭连接。这可以通过实现一个HttpSessionListener来实现,该 HttpSessionListener检查会话中的任何连接并在sessionDestroyed()方法中关闭它。

编辑:出于多种原因,使用数据库凭据让用户登录应用程序通常不是一个好的设计。但是,如果会话数量较少(因此在 DB 上同时打开的连接数量较少)并且合理设置了 DB 权限,这仍然可以正常工作。

编辑2:当然,对这种缓存连接的访问​​需要同步(例如,如果用户试图通过多个同时请求来访问您的应用程序,例如通过打开多个浏览器窗口)。这可能有点(有点)棘手。

于 2012-09-05T17:19:59.003 回答
1

您可能希望将用户名/密码/等存储在HttpSession中,而不是保留打开并分配给用户的连接列表。想象一下,会有数十或数百个用户——RDBMS 会正确处理如此多的并发连接吗?成千上万的用户呢?

于 2012-09-05T17:20:27.783 回答