【问题标题】:Different GWT applications runnnig on same server interfere each other from same browser在同一台服务器上运行的不同 GET 应用程序从同一浏览器相互干扰
【发布时间】:2014-02-17 16:04:47
【问题描述】:

我在 Jetty 上有一个 GWT 应用程序。配置不同的访问端口等后,用户可以在同一台服务器机器上多次启动该应用程序(例如2次)。我们注意到,当从同一个浏览器访问这两个不同的实例时,它们会相互干扰,例如,一个会踢出另一个会话。

如果从不同的浏览器访问,例如,ie和firefox或chrome,没有问题。

当然,如果两个应用程序在不同的服务器上运行,也没有问题。

以前有人见过同样的行为吗?如何解决这个问题?

【问题讨论】:

  • “踢出其他会话”是什么意思?
  • 当 user1 登录到第一个实例时,在 user2 登录到第二个实例后,user1 会话将被注销到登录页面。我刚刚发现我的问题和stackoverflow.com/questions/19566072/…几乎一样
  • 您使用什么身份验证?一个会话不会杀死另一个会话,除非您在代码中的某个地方故意这样做。
  • 调试了一下,到 instance1 的连接有一个名为 JSESSIONID 的 cookie;与 instance2 的第二个连接将有一个名称相同但值不同的 cookie。从浏览器的角度来看,它将清除之前的 cookie,并从本质上注销第一个 cookie。我不知道如何控制 cookie 名称。有可能吗?
  • 如果更改名称,所有 RPC 调用都将失败。 XsrfTokenServiceUtil 出于安全目的使用此 cookie。

标签: gwt browser rpc gwt-rpc gwt2


【解决方案1】:

如果您的服务器使用 cookie 来维护会话,并且两个浏览器实例共享同一组 cookie,那么当第二个登录时,它必须踢出第一个 - 同一个 cookie 怎么会有多个值?

尝试的选项:

  • 不要使用 cookie 来跟踪会话
  • 不需要第二个选项卡/窗口来登录,但要知道它已经登录了
  • 不支持同一用户同时伪装成两个用户

【讨论】:

  • 如果他们访问同一个 cookie,他们应该让两个会话都可以正常工作 - 即您提到的第二个选项应该可以工作。
  • 对,但显然这行不通,否则我们不会阅读这个问题 ;)。
  • 每个不同的登录都有不同的会话信息。从浏览器的角度来看,它使用 cookie 跟踪名称为“JSESSIONID”的会话的登录,第二次登录会清除第一个 cookie。 2nd 和 3rd 对我们都不起作用,无论谁登录,浏览器总是得到相同的 cookie 名称“JSESSIONID”,它总是从任何地方和任何人那里清除以前的。我不知道是否有一些解决方法。
  • 在 GWT 中,JSESSIONID 通常用于安全性,而不是用于登录。对于登录,您可以使用您想要的任何名称设置不同的 cookie。
  • 登录是“安全”的一部分,使用自己的身份验证/授权详细信息信任浏览器意味着客户端可以将 cookie 更改为其他人,或者客户端必须通过一秒钟令牌到服务器,当服务器可以将它保存在映射到 JSESSIONID 的会话对象中时。如果第二个页面再次破坏它,跟踪第二个 cookie 仍然会出现原始问题。
【解决方案2】:

JSESSIONID 用于防止跨站点请求伪造攻击。检查您如何设置此 cookie。通常,您会这样设置:

<script type="text/javascript">
    var info = "<%=XsrfTokenUtil.getToken(request.getSession().getId()) %>";
</script>

如果你这样做,你应该为每个浏览器窗口获得相同的令牌(值),只要你有一个会话。尝试找出为什么每次都设置一个新值。

另外,如果您需要拥有多个窗口的能力,您可以在 XsrfTokenUtil 中允许重复的 cookie:

final Cookie sessionCookie = getCookie(cookies, "JSESSIONID", false);

将 false 替换为 true 以允许重复 cookie。

【讨论】:

  • 对于
  • Pure GWT 仍然需要一个 HTML 页面,可以是简单的 HTML,也可以是 JSP 生成的。 GWT 将它生成的任何内容附加到此页面。
猜你喜欢
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多