2012-06-21 69 views
0

我在GWTP會話管理幾個基本問​​題。服務器會話管理GWTP

  1. 現在,我們創建一個新的會話,當用戶登錄到應用程序。現在,我可以打開一個瀏覽器並直接輸入帶有令牌的應用程序url,而無需登錄。它會將UI頁面呈現給用戶,而不進行任何檢查。現在,我們在服務器端進行會話檢查。因此,如果UI頁面只是在渲染時進行服務器調用,那麼我將會知道會話無效,並且我可以將其重定向到登錄頁面。但是,我們如何處理UI頁面沒有任何服務器端邏輯的情況,並且用戶直接使用該令牌粘貼URL。

我是否必須對來自GWTP演示者的每個頁面請求進行服務器調用,以檢查會話是否有效?或者我們有沒有其他辦法可以做到?

  1. 我沒有從GWT客戶端傳遞任何顯式會話ID參數到服務器。它只有JSessionId自動從瀏覽器傳遞到服務器。我們只是在服務器中做request.getSession(),看看它是否爲null(如果爲空,則不會登錄)。所以我希望我們沒有任何安全問題。請確認。

  2. 隨着暴露澤西使用RESTful Web服務,我們如何保持會話,因爲REST風格的WS是無狀態的Android和服務器端邏輯運行GWT客戶端。現在我們如何在這種情況下實現用戶會話?

回答

1

號你就不需要對每次調用服務器。當你記錄日誌,然後設置當前用戶只有一次在記錄門將類。 @UseGatekeeper註釋檢查當前用戶實例只能進行任何服務器調用。如果當前用戶存在,則它將從canReveal方法返回true。 它將允許訪問URL中的演示者名稱標記。

假設你不需要任何會話訪問它,然後使用,而不是它@NoGatekeeper。

>> let me know if the understanding is fine with your solution. Also, what about point 2 and 3 questions? 

A.1 U可以使用jsession,沒有任何安全問題。 A.2通過使用JSESSION ID,您可以傳遞jsession id來完成服務器調用,因爲如果服務器會獲得相同的會話,那麼服務器就會工作。

+0

非常感謝您的寶貴意見。我將執行相同的邏輯。我正在等待來自任何人的第三個問題輸入,並在稍後關閉該主題。 – Santosh

+0

我還有一個非常基本的問題。對不起,如果它太傻...我會得到用戶對象,一旦我完成了服務器調用。但是GIN在開始時就已經創建了所有對象,並且LoggedInGateKeeper將會以空用戶創建。如何將我的服務器返回值注入CurrentUser成員? – Santosh

+0

您只需爲home presenter設置@NoGatekeeper註釋。在登錄時設置登錄的用戶(當前用戶bean對象)。我想你會爲其他主持人提供想法,它會爲你提供當前用戶。並分配當前用戶爲空註銷後。 – iMBMT

0

儘管安全性應該始終在服務器端實施,但您可能不希望普通用戶在您的管理頁面上查看。在GWTP中,您可以通過創建自定義Gatekeeper類來阻止一些演示者泄露自己。

@Singleton 
public class LoggedInGatekeeper implements Gatekeeper { 

    private final CurrentUser currentUser; 

    @Inject 
    public LoggedInGatekeeper (
     final CurrentUser currentUser) { 
    this.currentUser = currentUser; 
    } 

    @Override 
    public boolean canReveal() { 
    return currentUser.isLoggedIn(); 
    } 
} 

然後你只需將@UseGatekeeper註釋添加到要保護每個主持人的代理:

@ProxyCodeSplit 
    @NameToken("userSettings") 
    @UseGatekeeper(LoggedInGatekeeper.class) 
    public interface MyProxy extends ProxyPlace<MainPagePresenter> {} 

你必須確保你的自定義ginjector有getLoggedInGatekeeper()方法。在你ginjector您還可以使用@DefaultGatekeeper的方法詮釋get方法返回要使用不與@UseGatekeeper註釋任何代理關守類。如果您使用@DefaultGatekeeper並希望指定代理不應該使用任何把關,然後用@NoGatekeeper標註上該代理。

了演講者的錯誤處理不使用網守,否則你在一個錯誤的危險運行,則必須確保。出於這個原因,最好的做法是用@NoGatekeeper註釋該代表的代理人。演示者處理錯誤是您的自定義PlaceManager的revealErrorPlace方法揭示的錯誤。如果您不覆蓋該方法,那麼這是您的revealDefaultPlace方法所揭示的方法。

參考GWTP docs更多信息

+1

我從上面明白的是,你必須做出一個服務器調用終於知道用戶是否登錄或沒有,如果我想對所有主持人支票在我的應用程序,然後在每一頁上要求我們做的無論用戶是否登錄,都使用GateKeeper方法進行服務器調用。讓我知道,如果你的解決方案的理解是好的。另外,關於第2點和第3點的問題呢? – Santosh