我在設計GWT應用程序時遇到了一些麻煩。我正在嘗試開發RIA應用程序(只有一個主要部件,我們稱它爲Main)。首先,用戶必須登錄。這是我的方式,但它確實有問題,你會看到。GWT:應用程序體系結構的問題
- 根面板
- 如果登錄爲全成(檢查數據庫)上顯示的登錄組件,顯示主要部件
- 控件添加到根面板
一切正常,但是當你按下刷新它再次顯示登錄組件......這一切都發生在onModuleLoad
方法中。
我應該如何重新設計這個邏輯?我想讓用戶登錄(這意味着RootPanel將保存主窗口小部件)一段時間。
我在設計GWT應用程序時遇到了一些麻煩。我正在嘗試開發RIA應用程序(只有一個主要部件,我們稱它爲Main)。首先,用戶必須登錄。這是我的方式,但它確實有問題,你會看到。GWT:應用程序體系結構的問題
一切正常,但是當你按下刷新它再次顯示登錄組件......這一切都發生在onModuleLoad
方法中。
我應該如何重新設計這個邏輯?我想讓用戶登錄(這意味着RootPanel將保存主窗口小部件)一段時間。
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服務器端並具有身份驗證服務的服務器。
您需要某種服務器端支持才能做到這一點。
例如,用戶登錄時,將其標記在服務器端會話中。在onModuleLoad()
中,請在顯示登錄表單之前調用服務器以檢查用戶是否已登錄。
與刷新相關的其他問題可以用history tokens來解決。
你能指定某種服務器端支持嗎?基於GWT的東西f.e? – Xorty 2011-01-27 21:37:06