Spring中取当前用户信息

 当前的用户信息这样拿:
 先定义一个局部线程变量里,
 然后在登录后将用户保存到该变量里面,
 这样就可以在你的当前spring容器中可以拿了

 
代码大致如下:

 

 

/**
*用户信息对象
*/

public class AuthUserVO {

 private String username;
 
 private String password;

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }
 
 
 public AuthUserVO(){
  
 }
 
 public AuthUserVO(String username, String password){
  this.username=username;
  this.password=password;
 }
 
}


/**
*对用户信息进行取或设置
*/
public class AuthCurrentUser {
 /**
 * 声明局部线程变量
 */
 private static ThreadLocal<AuthUserVO> currentUser = new ThreadLocal<AuthUserVO>();
 /**
 * 获取当前用户喜讯你对象
 * @return 当前用户喜讯你对象,IUserInfoVO类型
 */
 public static AuthUserVO get() {
 return (AuthUserVO) currentUser.get();
 }

 /**
 * 设置当前用户喜讯你对象
 * @param user 用户值对象
 */
 public static void set(AuthUserVO user) {
 currentUser.set(user);
 }
}

 


在你的登录action里:
AuthCurrentUser.set((AuthUserVO) request.getSession().getAttribute(
SessionScope.SESSION_FLAG_USERINFO));

 

 

在你所需要想拿用户的时候:
AuthUserVO accountdo = (AuthUserVO) AuthCurrentUser.get();

 

 

因为用户登录的线程与你已初始化的spring不在同一个容器里面,所以通过线程变量去传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security中,你可以使用`SecurityContextHolder`类的`getContext()`方法来获取当前的`SecurityContext`对象。通过`SecurityContext`对象,你可以进一步获取当前用户的认证信息。 以下是获取登录信息的示例代码: ```java Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated()) { Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails) { UserDetails userDetails = (UserDetails) principal; // 获取用户用户名 String username = userDetails.getUsername(); // 获取用户的权限(角色) Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities(); // 其他操作... } } ``` 在上面的代码中,首先通过`SecurityContextHolder.getContext().getAuthentication()`获取当前的`Authentication`对象。然后,你可以检查`authentication`是否为非空并且已经通过身份验证。 如果通过身份验证,你可以通过`authentication.getPrincipal()`获取用户的主体对象。在大多数情况下,主体对象将是一个实现了`UserDetails`接口的类,它包含了用户的详细信息,如用户名、密码、权限等。 你可以根据需要对`principal`进行类型转换,并使用相应的方法来获取用户用户名、权限等信息。 需要注意的是,在未经身份验证时,`authentication`可能为`null`或包含一个特殊的未经身份验证的实现类,具体取决于你的配置和登录状态。因此,在使用时需要进行适当的判断和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值