我必須部署到谷歌應用程序引擎的應用程序。在應用程序中,有兩個角色:標準用戶和管理員。我有基於表單的身份驗證設置,需要身份驗證的URL(例如/ admin和/ account)設置爲需要任何角色(*),這樣我才能確信Google已對其進行身份驗證。我爲管理路徑設置了一個過濾器設置,以及與後端業務邏輯對話的帳戶路徑,以查看用戶是否在我的應用程序中有一個帳戶,然後將它們轉發到他們請求的頁面,或者在必要時重定向。認證策略GAE
這似乎很麻煩,因爲對於每個請求,過濾器使用UserService得到谷歌的用戶,以確定由谷歌認證的人員是否具有在應用程序中的帳戶。我知道在部署到傳統應用程序服務器的應用程序的上下文中,我實際上可以定義訪問url所需的應用程序級角色,並且由於應用程序服務器將知道應用程序的角色/用戶,所以這足夠了,但由於谷歌正在處理身份驗證,我是否正確假設我必須按照每個請求來處理訪問要求,因爲我現在正在使用過濾器?我選擇使用過濾器來嘗試保持實際的servlet'更清潔',以便我知道當客戶端請求到達servlet時,它們已被認證並被授權訪問這些資源。
難道是明智的,攜帶數據(用戶是否被驗證,他們是否是管理員或標準用戶)在一個會議?這是我能想出的唯一另一種選擇。我不確定爲每個請求訪問UserService是多麼昂貴,因爲它依次訪問數據存儲。我想可能會有更好的方式來處理認證。
我的線沿線的思考還有一個緩存。一個持有所有用戶帳戶的ID,另一個持有所有管理員的ID,這些高速緩存將在創建新帳戶時更新。這樣,過濾器可以與緩存進行通信,而不是數據存儲。 – user1154644
記住memcache是易失性的。創建它們之後,您將不得不重新加載它們幾次。 – jirungaray