java - 为多个用户创建多个 Connection 对象

标签 java jakarta-ee web-applications authentication

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

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

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

最佳答案

这听起来好像您正在将连接对象的引用存储在静态变量中,从而在 Web 应用程序中仅保留单个连接对象。相反,您可以使用 HttpSession将用户特定的连接对象存储在用户 session 中作为 attribute 。用户第一次访问应用程序时将连接存储在那里,然后在每个后续请求时获取连接 back ,检查它是否仍然有效并使用它。

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

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

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

关于java - 为多个用户创建多个 Connection 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286415/

相关文章:

web-applications - 使用 list 关闭应用程序缓存

java - 将 JavaFX 中的折线图和散点图组合成多个系列

java - 在抽出每张牌之前检查我的牌组时出现奇怪的输出

java - 学习 Java EE 及相关技术的路线?

javascript - 关于启动 JS 或 JQuery 进行文件处理的建议

jquery - 开发时同时使用Dojo、extJS和Jquery有什么缺点?

java - java中的审计和数据历史

java - renderHead 未被调用

java - 我应该将 log4j2.xml 放在 WAR 文件中的什么位置?

java - 自动将 `insertable = false, updatable = false` 添加到 Netbeans 生成的实体