【发布时间】:2011-01-20 15:05:43
【问题描述】:
我目前有一个 Ruby on Rails 系统,并计划将其移植到 GWT。在我们这样做之前,希望有一个概念证明,其中部分网站是用 GWT 编写的,以表明 GWT 可以使用和显示当前内容。系统GWT部分的数据流向如下:
- 客户端向 GWT 服务器发送 RPC 调用
- 服务器接收 RPC 调用,然后向 Rails 系统发出等效的 Ajax 请求
- 服务器根据 Ajax 请求的结果生成一个 Java 对象,并将其传回给客户端
我现在遇到的问题是跨两个系统管理用户会话数据。我们只有 1 个 Tomcat 实例,它有自己的会话类型,然后我们的 Ruby 系统使用 ActiveRecordStore 将会话数据存储在数据库中。
这里的问题是,当 Tomcat 系统与 Ruby 系统对话时,如果 GWT 客户端发出了登录请求,那么最后一个从 GWT 系统登录的用户在 Rails 系统中执行的所有传出 Ajax 请求为如果他们是当前用户,因为 Tomcat 系统看起来像 Rails 的单个客户端。
无论如何,如果用户开始与 Tomcat 系统的会话,Ruby 系统将意识到这一点并具有等效会话,因此即使 Tomcat 服务器是它的单个客户端,我怎样才能做到这一点, Rails 系统知道许多不同的用户从同一个客户端与它通信。
【问题讨论】:
-
“用户开始与 Tomcat 系统的会话”是什么意思?他是使用 Tomcat 的某种身份验证方法还是自定义解决方案登录?无论哪种方式,会话密钥很可能存储在 cookie 中(如 JSESSIONID),您只需确保将其传递给 RoR 端。
-
我对您的第 2 步和第 3 步非常感兴趣。您是否需要进行任何自定义 RPC 序列化处理?您在 GWT 服务器端使用什么基本机制来发出“对 Rails 系统的等效 Ajax 请求”?我对 GWT-Rails 接口特别感兴趣。谢谢!
标签: ruby-on-rails session gwt hybrid