如何在 security 中 获得 user 信息?
由 security 管理权限后,登陆也由security来管理,因此如果不修改或扩展security的登陆机制,则无法手动设置user到session;
为了获得用户信息,有2种方案:
(1) 当用 UserService 的实现类 获取用户时,将用户设入 session ,注意不要设置密码等安全信息,这样就可以直接从session中获得user信息了,但缺点是无论是否登陆成功都设置了session信息;
(2) security中已经用某种方式保存了登陆用户的信息,可以使用下面的实用类来获得登陆的用户;
package com.spaceflysky.tools;
import org.apache.log4j.Logger;
import org.springframework.security.Authentication;
import org.springframework.security.context.SecurityContextHolder;
import com.spaceflysky.domain.User;
/**
* 从 security 中获得已登录用户信息;
*
* @author space
* @date Oct 6, 2008 5:58:58 PM
*/
public class SecurityUserTool {
protected static Logger log = Logger.getLogger(SecurityUserTool.class);
private static final Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 获得登陆的用户
*
* @return
*/
public static final User getUser() {
User user = null;
try {
user = (User) getAuthentication().getPrincipal();
} catch (Exception e) {
log.error("------ Get login user error ------ !", e);
}
return user;
}
}