2012-10-11 51 views
0

Google如何在不通過HttpServletRequest請求參數的情況下調用userService.getCurrentUser()方法?我期望擴展UserService,但它不允許我輕鬆完成。getCurrentUser AppEngine中的魔術 - 它是如何工作的?

我創建了自己的身份驗證機制,它與UserService重疊,以便我可以允許Google支持的用戶和將自動登錄的用戶。但我有興趣知道如何從任何函數調用時發送getCurrentUser。

這是當前工作流

要求,以確保資源 - >過濾器 - >設置當前用戶的地方,但我不知道在那裏,這樣我可以從應用程序的其他部分調用它沒有通過HTTPRequests的..

在我的代碼

GetCurrentUser()應該返回在過濾器中設置的用戶。請注意,我不會通過原來的HttpServletRequest

謝謝。

回答

0

經過幾天的研究,我們可以安全地將會話信息保存在ThreadLocal中。這在servlet過濾器中設置。 Static ThreadLocal variable in a WebApp - Are there any Security/Performance issues?

由於每個servlet都在一個線程中執行,所以我們可以安全地從代碼中調用getCurrentUser,然後從線程本地讀取代碼。

雖然警告。線程被回收。所以你可以得到一個threadlocal爲不同的用戶設置的線程。您必須確保每次都重置。