2015-04-22 104 views
1

我必須部署到谷歌應用程序引擎的應用程序。在應用程序中,有兩個角色:標準用戶和管理員。我有基於表單的身份驗證設置,需要身份驗證的URL(例如/ admin和/ account)設置爲需要任何角色(*),這樣我才能確信Google已對其進行身份驗證。我爲管理路徑設置了一個過濾器設置,以及與後端業務邏輯對話的帳戶路徑,以查看用戶是否在我的應用程序中有一個帳戶,然後將它們轉發到他們請求的頁面,或者在必要時重定向。認證策略GAE

這似乎很麻煩,因爲對於每個請求,過濾器使用UserService得到谷歌的用戶,以確定由谷歌認證的人員是否具有在應用程序中的帳戶。我知道在部署到傳統應用程序服務器的應用程序的上下文中,我實際上可以定義訪問url所需的應用程序級角色,並且由於應用程序服務器將知道應用程序的角色/用戶,所以這足夠了,但由於谷歌正在處理身份驗證,我是否正確假設我必須按照每個請求來處理訪問要求,因爲我現在正在使用過濾器?我選擇使用過濾器來嘗試保持實際的servlet'更清潔',以便我知道當客戶端請求到達servlet時,它們已被認證並被授權訪問這些資源。

難道是明智的,攜帶數據(用戶是否被驗證,他們是否是管理員或標準用戶)在一個會議?這是我能想出的唯一另一種選擇。我不確定爲每個請求訪問UserService是多麼昂貴,因爲它依次訪問數據存儲。我想可能會有更好的方式來處理認證。

回答

1

不能確定它是否是一個最佳的解決方案,但我們現在做的是存儲用戶會話(我們自己實現,而不是GAEs),我們對其進行緩存積極利用Objecitfy的緩存功能。這樣,我們只打在登錄/註銷數據存儲,之後幾乎是免費的大部分查詢(因爲在我們的應用程序使用標準的會議時間,緩存刷新是不是一個真正的關注)

+0

我的線沿線的思考還有一個緩存。一個持有所有用戶帳戶的ID,另一個持有所有管理員的ID,這些高速緩存將在創建新帳戶時更新。這樣,過濾器可以與緩存進行通信,而不是數據存儲。 – user1154644

+0

記住memcache是​​易失性的。創建它們之後,您將不得不重新加載它們幾次。 – jirungaray