2010-07-19 60 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和过滤器链应该休息。