UserContext 用户上下文

张开发
2026/5/22 3:08:04 15 分钟阅读
UserContext 用户上下文
UserContext是服务端用于表示当前请求用户上下文的对象其内容因业务需求而异。通常包含以下几类信息1. 用户身份标识必选userId用户唯一标识用于数据隔离、权限判断。userName登录名/账号用于日志审计、显示。nickname/realName昵称或真实姓名可选便于前端展示。2. 认证与授权信息roles角色列表如SetString或ListString用于角色级权限校验。permissions权限标识列表如SetString用于细粒度权限判断如PreAuthorize(hasPermission(capital:delete))。dataScope数据权限范围如部门 ID、机构 ID用于数据过滤。3. 租户信息多租户场景tenantId租户 ID用于数据隔离、查询自动拼接租户条件。4. 请求元数据可选用于审计/追踪clientIp客户端 IP用于日志记录。requestId请求追踪 ID便于链路排查。5. 其他业务相关departmentId/orgId所属部门/组织用于按部门过滤。employeeId工号如企业中。language国际化语言偏好。典型示例javapublic class UserContext { // 身份标识 private Long userId; private String userName; private String realName; // 权限 private SetString roles; private SetString permissions; // 租户 private String tenantId; // 请求元数据 private String clientIp; private String requestId; // 部门 private Long departmentId; // 构造器、getter、setter... }设计原则最小化原则只包含当前请求真正需要的信息避免存储冗余或敏感数据如密码、加密密钥。与认证源解耦UserContext由认证信息如 JWT 中的 claims结合数据库/缓存组装而成避免在 token 中放置过多内容。可扩展性若使用ThreadLocal存储需在请求结束时清除防止内存泄漏。与安全框架结合在 Spring Security 中UserContext通常是对Authentication.getPrincipal()的增强或包装。与 DTO 的区别UserContext是服务端内部运行时对象用于传递“谁在操作”而 DTO 是跨层或跨进程传输业务数据的载体。两者不应混淆。

更多文章