2010-02-24 66 views
0

我目前有一个Ruby on Rails系统,并且有计划将它移植到GWT。在我们这样做之前,需要用GWT编写部分站点的概念证明来证明GWT可以使用并显示当前内容。数据的系统中的GWT部分的流动如下:如何管理混合Ruby/GWT系统中的会话?

  1. 客户端发送一个RPC调用GWT服务器
  2. 服务器接收RPC调用,然后使一个等效Ajax请求滑轨系统
  3. Server生成从Ajax请求的结果的Java对象,并将其传递回客户端

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

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

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

+0

相关问题:http://stackoverflow.com/questions/2270215/gwt-rpc-cookie-authentication和http://stackoverflow.com/questions/2053960/gwt-and-storing-a-session-key – 2010-02-24 19:25:05

+0

“用户开始与Tomcat系统会话”是什么意思?他是否使用Tomcat的某种身份验证方法或自定义解决方案进行登录?无论哪种方式,会话密钥很可能存储在一个cookie(如JSESSIONID),你只需要确保将它传递给RoR端。 – 2010-02-24 19:26:57

+0

我对您的步骤2和3感兴趣。 您是否必须执行任何自定义RPC序列化处理? 你在GWT服务器端使用“向Rails系统提供相应的Ajax请求”的基本机制是什么?我对GWT-Rails接口特别感兴趣。 谢谢! – cellepo 2015-06-21 21:19:54

回答

1

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

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

0

我不知道RoR,但是在大多数Web技术会话都使用Cookie进行维护。如果您保存从Java服务器到RoR实例的多次调用的Cookie(对于给定的用户),您应该都很好。

+0

我会试试这个。感谢您的建议 – 2010-02-24 17:43:12