我目前有一个 Ruby on Rails 系统,并计划将其移植到 GWT。在我们这样做之前,主管部门希望获得概念验证,网站的一部分是用 GWT 编写的,以表明 GWT 可以使用和显示当前内容。系统GWT部分的数据流程如下:

  1. 客户端向 GWT 服务器发送 RPC 调用
  2. 服务器接收 RPC 调用,然后向 Rails 系统发出等效的 Ajax 请求
  3. 服务器根据 Ajax 请求的结果生成一个 Java 对象,并将其传回客户端

我现在遇到的问题是跨两个系统管理用户会话数据。我们只有 1 个 Tomcat 实例,并且有自己的会话类型,然后我们的 Ruby 系统使用 ActiveRecordStore 将会话数据存储在数据库中。

这里的问题是,当 Tomcat 系统与 Ruby 系统对话时,如果 GWT 客户端发出了登录请求,那么最后一个从 GWT 系统登录的用户将在 Rails 系统中执行所有传出的 Ajax 请求,就好像它们'是当前用户,因为 Tomcat 系统看起来就像 Rails 的单个客户端。

无论如何,我怎样才能做到这样,如果用户开始与 Tomcat 系统进行会话,Ruby 系统将意识到这一点并拥有一个等效的会话,以便即使 Tomcat 服务器是它的单个客户端,Rails 系统意识到许多不同的用户正在从同一个客户端与其进行通信。

有帮助吗?

解决方案

我认为解决这个问题的最好方法是使用cookie而不是数据库来存储会话。Rails 本身就支持这一点,实际上它已经成为默认的 cookie 存储一段时间了。Cookie 本身由服务器机密签名,以防止用户篡改。我认为 Rails 实现使用 Ruby 封送处理来转储/加载数据,因此您可能必须在 Java 中实现它,或者您可以使用相同的想法在两侧实现您自己的 cookie 管理器。

也可以在 Java 应用程序中仅使用 JRuby 中的 Ruby 代码。

其他提示

我不知道 RoR,但在大多数网络技术中,会话都是使用 cookie 来维护的。如果您在从 Java 服务器到 RoR 实例的多次调用中保留 cookie(针对给定用户),那么您应该一切顺利。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top