在处理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);
}
}
答案 0 :(得分:2)
Spring Security会自动将经过身份验证的User对象存储在会话中的默认配置中。安全过滤器链的第一件事就是检查会话是否有有效的身份验证令牌(如果存在),然后用它填充SecurityContext
并跳过任何新的身份验证过滤器。您需要做的就是写下UserDetailsService
,过滤链应该是其余部分。
答案 1 :(得分:0)
请记住,要存储在会话中的用户对象不必与从数据库中检索的用户对象相同。一种通常可接受的方法是将常用的用户详细信息存储在会话中,并仅针对不常访问的数据访问数据库。那么,在会话中存储的用户信息以及不存储的内容完全取决于应用程序。