【问题标题】:Isolation of sessions and interface parameters Java EE隔离会话和接口参数 Java EE
【发布时间】:2014-06-28 15:33:18
【问题描述】:

我们有一个运行在 Tomcat5 服务器上的 JavaEE Web 应用程序(jsp、java 和 extjs 用于开发这个工具)。

我们有时会观察到,尤其是在应用程序使用率很高的情况下,一些会话变量或接口字段在servlet 中混杂了

这意味着:当一个用户连接时,他的参数保存在会话中。

在数据库 ORACLE 中更新或插入数据后,系统返回可能同时连接到不同导航器或不同计算机上的另一个用户的名称。 其他时候 request.get 参数会从不同的客户端或用户界面获取 。 谢谢你帮我解决这个问题。

【问题讨论】:

  • 我敢打赌,您的 servlet 有字段,并且您在 doGet 和/或 doPost 方法中更改了它们的值。
  • servlet 中的所有元素都应该来自同一个用户会话界面。但有时用户 id 或值会在将数据带到 servlet 的 http 协议中混淆。
  • 我不是这个意思。请提供您的 servlet 示例。

标签: java jsp session extjs arraylist


【解决方案1】:

我终于明白 servlet.java 是如何工作的了。 我像主进程一样工作,为任何调用创建线程 因此,此类的所有属性对所有线程都是通用的,我们不确定访问它们时得到的结果。

如果我们希望任何客户端在私有上下文中使用这些变量,我们必须将它们作为局部变量放入函数“doGet”或“doPost”中。

我的问题解决了吗

【讨论】:

    【解决方案2】:

    发生这种情况的唯一方法是,如果您在某个地方有一个单例来跟踪会话,并且由于某种原因,这个单例会混淆会话之间的变量。

    您可以试试这个:不要仅通过凭据来区分用户(假设您没有使用联邦),而是返回一个令牌,在所有会话中对登录的用户是唯一的,并让用户每次发送该唯一 ID要求。这样,即使用户使用许多不同的浏览器登录,您也可以区分请求/响应。

    但同样,这只会发生在您执行单例连接会话之类的操作时,会话本身不会在它们之间交换变量。

    【讨论】:

    • 我尝试将会话 ID 保留在 GUI 中,并在我到达 servlet 时与从请求中获取的另一个进行比较。但这并不能保证每个参数都来自同一个用户
    • 嗯。我认为你做的太多了,不允许 servlet(和过滤器)完成他们的工作。尝试详细了解它们的工作原理。
    • 请您给我一个地址,我可以在其中找到有关 servlet .java 以及如何在许多 Web 客户端之间有效使用它们的详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2018-03-04
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多