簡體   English   中英

從HttpSession中存儲/檢索常用數據的最佳方法

[英]Best way to store/retrieve frequently used data from the HttpSession

我有一個帶有Java Servlet的標准GAE應用程序。 我想在整個系統中實現用戶角色功能。 為此,我想從數據庫中檢索用戶角色並將其存儲在會話中,這樣所有servlet都可以訪問此數據。 我讀了一些有關它的文章,而實現它的基本方法是使用過濾器在HttpSession中填充必要的數據。 但是,在這種情況下,我應該以相同的方式從每個Servlet中的HttpSession檢索數據,這將導致代碼重復。 解決此問題的方法僅僅是從HttpServlet類派生,並使用用於HttpSession的必要方法(例如,受保護的角色getUserRole())創建自己的Servlet。 這使得過濾器的使用毫無意義。 在這種情況下,有什么理由要使用過濾器嗎?

您應該有一個頂級過濾器,它映射到/* 如果會話中不存在此過濾器,則會從數據庫中提取角色。 現在,您擴展HttpServletRequest並創建一個覆蓋isUserInRole()方法的包裝器,以便根據需要獲取該角色。 創建此request對象的對象,並在Filter中的chain.doFilter中使用。

因此,所有Servlet都可以僅調用request.isUserInRole()來檢查角色

您可以有一個直接從HttpServlet繼承的主Servlet,該Servlet知道如何通過受保護的Role getUserRole()從HttpSession中獲取用戶角色。 然后,您的應用程序中的所有其他servlet應該對該主servlet進行子類化,以使其具有通用功能。

Servlet過濾器在調用任何其他Servlet之前被調用,過濾器的主要目的是在將請求/響應傳遞給Servlet進行進一步處理之前修飾請求/響應。 您可以選擇從過濾器中訪問數據庫,並相應地填充HttpSession,然后每個Servlet都會知道如何稍后從HttpSession中檢索該信息。

我在這里推薦的另一個選項是在處理請求的第一個servlet中用用戶角色填充HttpSession(您可以使用主servlet的另一種常用方法來執行此操作,例如,受保護的void populateUserRole(HttpSession httpSession))。

干杯;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM