2013-03-25 97 views
-1

在我們的基於Java的Web應用程序中,我們有角色和用戶的概念。基本上,我們的頁面中有很多鏈接,可以根據分配給用戶的角色訪問這些鏈接。角色和用戶相關信息存儲在數據庫中。限制用戶訪問Web應用程序中的多個頁面使用Java

在用戶登錄時間期間,我們查詢數據庫,獲取所有相關角色並僅顯示分配給其角色的鏈接。因此,用戶只能看到他有權訪問的鏈接。

這種方式工作很Weel。但是每次用戶登錄時,程序都會從​​數據庫中檢查他的角色級別,這對數據庫是一種負擔。請建議我們阻止訪問Web應用程序中的多個鏈接的另一種方法。

+0

爲什麼不把角色放在'HttpSession'對象中並且每次檢查一次? – 2013-03-25 11:09:25

+0

將角色放到會話中,爲您的DAO添加一個緩存過程,使用現有的框架,比如Spring Security ... – sp00m 2013-03-25 11:10:33

+0

但是在我們基於JSp開發的Web應用程序中,我們沒有關於Spring – 2013-03-25 11:13:42

回答

1

2個選擇:

1)把用戶角色的會議時,他被認證爲首次訪問會話每次他試圖訪問一個功能

2)使用Map<String, List<Role>>作爲緩存並訪問此映射而不是數據庫以驗證用戶。地圖的關鍵字可以是用戶名。當用戶登錄時,將用戶添加到地圖中。當用戶註銷或會話過期時,請從地圖中刪除。 Spring Security使用Ehcache進行緩存,所以你可以這樣做。

public void doLogin(HttpSevletRequest request) { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    User user = service.authenticate(username, password); 
    HttpSession session = request.getSession(); 
    session.setAttribute("roles", user.getRoles()); 
} 

public void save(HttpServletRequest request) { 
    List<Role> roles = request.getSession().getAttribute("roles"); 
    for(Role role : roles) { 
    if(role.getName()=="save") { 
     service.save(); 
     break; 
    } 
    } 
} 

增加了一個簡單的例子。對於緩存,除了會話使用Map之外,它將是類似的。

+0

的任何意見,請分享一些相關代碼示例 – 2013-03-25 11:19:00

+1

請參閱編輯。你應該做的一個非常簡單的例子。 – 2013-03-25 11:32:50

相關問題