Skip to content

当前登录用户信息

1. 工具类:CurrentUserUtils.java

提供 3 种获取当前用户信息的方法

  1. getCurrentUser() - 从Spring Security上下文,获取用户基本信息(ZUser.java)
  2. getCurrentUserAll() - 从Spring Security上下文,获取用户全部信息(ZUserAllDTO.java)
  3. getCurrentUserByToken(String token) - 根据jwtToken获取当前用户信息(ZUser.java)
java

// 使用示例1:
ZUser user = CurrentUserUtils.getCurrentUser();
// 使用示例2:
ZUserAllDTO userDto = CurrentUserUtils.getCurrentUserAll();
// 使用示例3:
ZUser userByToken = CurrentUserUtils.getCurrentUserByToken(jwtToken);

2. 工具类的工作原理

工作原理

  • Spring Security 已配置过滤器Filter,自动读取请求中的JwtToken信息,解析后从Redis缓存中,读取当前用户信息,放入上下文
  • 支持2种方式传递JwtToken:
    1. (推荐)放在请求头(header)中,key是‘UserJwtToken’,前端web-vue2中,request.js统一处理,已自动加入该参数
    2. 也可以放在请求参数中,key是‘UserJwtToken’

过滤器

  • JwtTokenAuthenticationFilter 过滤器
    1. 先验证 UserJwtToken 是否有效
    2. 然后从redis中,读取当前用户信息
    3. 将当前用户信息,放入Spring Security 上下文

3. 返回的用户类

  • 用户基本信息类:com.kg.core.zuser.entity.ZUser.java
java
public class ZUser implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("用户ID")
    @TableId(value = "user_id", type = IdType.ASSIGN_UUID)
    private String userId;
    @ApiModelProperty("用户所在部门ID")
    private String orgId;
    @ApiModelProperty("用户名")
    private String userName;
    
    // ...省略
}
  • 用户全部信息类(继承了用户基础信息类):com.kg.core.zuser.dto.ZUserAllDTO.java
java
public class ZUserAllDTO extends ZUserDTO {
    /** 所属角色列表 */
    private List<ZRole> roleList;
    /** 所在部门 */
    private String orgName;
    /** 部门父级ID */
    private String orgParentId;
    /** 部门路径ID */
    private String orgPath;
    /** 部门层级 */
    private Integer orgLevel;
}