Architecture
ddd4j-satoken
|
|
编码 DDD4J 项目中 Sa-Token 的扩展用法。LLM 知道 Sa-Token 的标准 API,但不知道 DDD4J 的 StpKit 扩展模式。
LLM 会用 StpUtil.getLoginId() 获取登录用户——DDD4J 要求用 StpUtil.getExtra("uuid") 获取扩展载荷。LLM 不知道 DDD4J 登录时注入了 user/org/role 扩展参数。LLM 会用 SaTempUtil.createToken()——DDD4J 封装了 SaTempKit。
| # | 错误 | 正确做法 |
|---|------|---------|
| 1 | StpUtil.getLoginId() 获取用户信息 | StpUtil.getExtra("uuid") / getExtra("username") |
| 2 | 登录只传 userId | 登录时注入扩展载荷(user/org/role) |
| 3 | SaTempUtil.createToken() | 用 SaTempKit.createToken()(DDD4J封装) |
| 4 | 直接抛 Sa-Token 异常 | 集成到 GlobalExceptionHandler 返回 ApiRestResponse |
| 5 | StpUtil.login(userId) 标准写法 | 用 StpKit 指定账号体系的 login |
| 6 | 跨服务鉴权用 Authorization header | 用 Same-Token + SaSameUtil |
// ✅ 登录:注入扩展载荷
StpUtil.login(userId, new SaLoginParameter()
.setExtra("uuid", user.getUid()) // 用户唯一标识
.setExtra("username", user.getUserName()) // 用户名
.setExtra("orgId", user.getOrgId()) // 组织ID
.setExtra("role", user.getRoleCodes()) // 角色列表
.setExtra("realName", user.getRealName()) // 真实姓名
);
// ✅ 获取扩展载荷(而非 getLoginId)
String uuid = (String) StpUtil.getExtra("uuid");
String username = (String) StpUtil.getExtra("username");
String orgId = (String) StpUtil.getExtra("orgId");
// ✅ DDD4J 临时令牌
String token = SaTempKit.createToken(userId, 300); // 5分钟
Long id = SaTempKit.parseToken(token, Long.class);
// ✅ 跨服务鉴权
// Gateway: 注入 Same-Token
SaSameUtil.getToken();
// 子服务: 校验
SaSameUtil.checkCurrentRequestToken();
// 定时刷新(每5分钟)
@Scheduled(cron = "0 0/5 * * * ?")
public void refreshToken() { SaSameUtil.refreshToken(); }
StpUtil.getExtra() 返回 nullsa-token-temp-jwt本技能不收集、存储或传输任何用户数据。