我们的项目是 Spring + Spring Security + Maven + Hibernate + JSF + Icefaces
我们需要为 currentUser 定义值,但只有在用户登录后才能定义它。
public static UserDetails currentUserDetails(){
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
if (authentication != null) {
Object principal = authentication.getPrincipal();
return (UserDetails) (principal instanceof UserDetails ? principal : null);
}
return null;
}
如果我们尝试在服务器启动中包含定义,则会抛出 nullpointerException(如预期的那样)。
我们目前的方法是在 getter 方法中懒惰地定义它。因此,每当 JSF 调用它时,都会运行 HQL,但这非常昂贵。
有人可以就如何在用户已经登录后仅运行一次 currentUserDetails 方法提供建议吗?