2011-01-27 76 views
3

我在設計GWT應用程序時遇到了一些麻煩。我正在嘗試開發RIA應用程序(只有一個主要部件,我們稱它爲Main)。首先,用戶必須登錄。這是我的方式,但它確實有問題,你會看到。GWT:應用程序體系結構的問題

  1. 根面板
  2. 如果登錄爲全成(檢查數據庫)上顯示的登錄組件,顯示主要部件
  3. 控件添加到根面板

一切正常,但是當你按下刷新它再次顯示登錄組件......這一切都發生在onModuleLoad方法中。

我應該如何重新設計這個邏輯?我想讓用戶登錄(這意味着RootPanel將保存主窗口小部件)一段時間。

回答

3

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

如何記住登錄

我們的登錄 系統至今錯過了實用的功能: 現在它要求用戶每次登錄 一次。

我們可以使用Cookies來允許用戶的 網頁瀏覽器'記住'登錄。 在GWT,設置Cookie(這你最好 做你的GWT代碼接收 響應後權我們在前面 代碼片段所做的那樣):

String sessionID = /*(Get sessionID from server's response to your login request.)*/; 
final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks in this example. 
Date expires = new Date(System.currentTimeMillis() + DURATION); 
Cookies.setCookie("sid", sessionID, expires, null, "/", false); 

現在你可以運行下面的代碼 !您的入口點開始執行 右後:

String sessionID = Cookies.getCookie("sid"); 
if (sessionID != null) checkWithServerIfSessionIdIsStillLegal(); 
else displayLoginBox(); 

記住 - 你絕不能依靠餅乾 頭髮送到服務器的會話ID ;請僅查看您的GWT應用程序在 中明確向您的 服務器發送消息的有效負載的會話ID 。

我不知道你是如何應用GWT實現與登錄服務的通信,但如果你想看到另一個例子,我在這裏遵循的例子:

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html#user

雖然它使用Google App Engine作爲後端身份驗證服務,我認爲它足夠通用,可以適應任何支持GWT RPC服務器端並具有身份驗證服務的服務器。

1

您需要某種服務器端支持才能做到這一點。

例如,用戶登錄時,將其標記在服務器端會話中。在onModuleLoad()中,請在顯示登錄表單之前調用服務器以檢查用戶是否已登錄。

與刷新相關的其他問題可以用history tokens來解決。

+0

你能指定某種服務器端支持嗎?基於GWT的東西f.e? – Xorty 2011-01-27 21:37:06