Spring Security当前用户会话Bean

时间:2010-07-19 22:30:26

标签: jsf spring-security

在处理Spring Security时,您通常会将当前用户存储到会话变量中,还是每次想要访问某些用户信息时都会访问数据库?

目前我做了以下但是看起来有点浪费:

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);
    }
}

2 个答案:

答案 0 :(得分:2)

Spring Security会自动将经过身份验证的User对象存储在会话中的默认配置中。安全过滤器链的第一件事就是检查会话是否有有效的身份验证令牌(如果存在),然后用它填充SecurityContext并跳过任何新的身份验证过滤器。您需要做的就是写下UserDetailsService,过滤链应该是其余部分。

答案 1 :(得分:0)

请记住,要存储在会话中的用户对象不必与从数据库中检索的用户对象相同。一种通常可接受的方法是将常用的用户详细信息存储在会话中,并仅针对不常访问的数据访问数据库。那么,在会话中存储的用户信息以及不存储的内容完全取决于应用程序。