核心功能(已连接真实源服务器验证):
- /sys/watchUserLogin 本地处理:RSA解密验证设备密码(防伪造) + 单飞换token + Redis缓存
- 业务接口经本地通配Controller手动HttpUtils透传至源服务器 + 401检测清缓存
- token失效三重自愈:10秒探活 + 预过期刷新 + 被动401兜底
配置隔离(dotenv风格)+ 安全:
- .env 存敏感信息不入库;app.yml 用 ${KEY} 占位符引用;EnvLoader启动前加载
- 移除fastjson(规避0day),JSON改用Solon内置snack4
联调修复多个Solon实际API问题(配置文件名/YAML插件/打包/redisx/注解路径等)
Co-Authored-By: Claude <noreply@anthropic.com>
18 lines
1.3 KiB
Markdown
18 lines
1.3 KiB
Markdown
---
|
||
name: jeecg-token-mechanism
|
||
description: 源服务器jeecg的token机制(JWT+Redis双层、滑动续期),决定中转刷新策略
|
||
metadata:
|
||
type: reference
|
||
---
|
||
|
||
源服务器 jeecg 的 token 机制(调研 `data-center-boot-spring3` 代码得出):
|
||
|
||
- **JWT 带 exp**(`JwtUtil.sign` 用 `withExpiresAt`,exp = 生成时间 + 3.5天),但 **exp 不是硬性过期**。
|
||
- **真正失效条件**:Redis key `prefix_user_token:<token>` 被删除(主动 logout 或 7天不活跃)。Redis TTL = 604800秒(7天)。
|
||
- **滑动续期**:`ShiroRealm.jwtTokenRefresh()` 每次请求(Redis key 存在时)重置 TTL 为 7 天,且 JWT exp 到期时静默重签。
|
||
- **失效返回**:HTTP 401,body `"Token失效,请重新登录!"`,token 从 `X-Access-Token` 请求头读取。
|
||
|
||
**对中转的影响**:中转每 10 秒探活会刷新源服务器 Redis TTL,token 实际不会自然过期(除非被主动 logout)。预过期刷新基于 JWT exp,因滑动续期很少触发,作为双保险保留。探活失效/被动401 后必须 `forceRefresh`(先清缓存再换新),否则命中失效 token 死循环。
|
||
|
||
**RSA**:源服务器 `RSAEncryptUtils.decrypt1` 用 `Cipher.getInstance("RSA")` = `RSA/ECB/PKCS1Padding`,公钥 X.509、私钥 PKCS#8、明文 UTF-8、密文 Base64,1024位。中转 `RsaEncryptUtil` 已对齐。
|