2010-07-19 61 views
0

在處理Spring Security時,您是否通常將當前用戶存儲到會話變量中,或者每次訪問某些用戶信息時是否都打到了數據庫?Spring安全性當前用戶會話Bean

目前,我這樣做,但似乎有點浪費:

public class CurrentUserService { 
    private UserDAO userDAO; 



    public CurrentUserService(UserDAO userDAO) { 
     super(); 
     this.userDAO = userDAO; 
    } 

    public User getUser(){ 
     String username=SecurityContextHolder.getContext().getAuthentication().getName(); 
     return userDAO.findUser(username); 
    } 
} 

回答

0

請記住,用戶對象存儲在會話不需要你從數據庫中檢索相同。通常可以接受的方法是,將用戶經常需要的詳細信息存儲在會話中,並僅爲訪問頻率較低的數據命中數據庫。那麼,會話中存儲的用戶信息以及不存儲的內容完全取決於應用程序。

2

Spring Security會自動將經過身份驗證的用戶對象存儲在默認配置中的會話中。安全過濾器鏈的第一件事是檢查會話中是否存在有效的身份驗證令牌,如果存在,那麼它使用它填充SecurityContext並跳過任何新的身份驗證過濾器。所有你需要做的是寫你的UserDetailsService和過濾器鏈應該休息。