2010-02-24 24 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