|
|
@@ -11,7 +11,8 @@
|
|
11
|
11
|
| **后端** | RuoYi **v3.9.2**(springboot2):JDK 8、Spring MVC |
|
|
12
|
12
|
| **代码包** | `com.ruoyi.web.modules.screen`(`ScreenLoginController` / `ScreenLoginService` / `ScreenLoginRsaSupport` / `ScreenLoginProperties`) |
|
|
13
|
13
|
| **鉴权** | 登录接口 `@Anonymous` 免鉴权;登录成功后与普通若依接口一致,请求头 `Authorization: Bearer <token>` |
|
|
14
|
|
-| **专用账号** | `sys_user` 预置用户(默认 `screen_viewer`),建议仅授予 `bigScreen:*:query` |
|
|
|
14
|
+| **专用账号** | `sys_user` 预置用户(默认 `screenviewer`);校验存在且未删除、未停用 |
|
|
|
15
|
+| **菜单权限** | 登录成功后在 JWT 中注入 `bigScreen:*:*`,前端默认拥有全部大屏菜单与看板接口权限,**无需**在若依中单独授权 |
|
|
15
|
16
|
| **加密** | `RSA/ECB/PKCS1Padding`,与若依后台 `jsencrypt` 密钥格式兼容 |
|
|
16
|
17
|
| **客户端 IP** | **不校验**白名单/黑名单;仅写入登录日志 |
|
|
17
|
18
|
|
|
|
@@ -42,14 +43,14 @@ bigscreen:
|
|
42
|
43
|
enabled: false # 生产按需 true
|
|
43
|
44
|
rsa-public-key: "" # Base64 公钥(可含换行,服务端会去除空白)
|
|
44
|
45
|
rsa-private-key: "" # Base64 私钥(仅服务端,勿下发前端)
|
|
45
|
|
- username: screen_viewer # 专用 sys_user 登录名
|
|
|
46
|
+ username: screenviewer # 专用 sys_user 登录名
|
|
46
|
47
|
```
|
|
47
|
48
|
|
|
48
|
49
|
| 项 | 说明 |
|
|
49
|
50
|
| --- | --- |
|
|
50
|
51
|
| `enabled` | `false` 时公钥接口与登录接口均返回「大屏免密登录未启用」 |
|
|
51
|
52
|
| `rsa-public-key` / `rsa-private-key` | 须成对;开发环境可与 `ruoyi-ui/src/utils/jsencrypt.js` 中示例密钥一致 |
|
|
52
|
|
-| `username` | 不存在、已删除或停用时登录失败 |
|
|
|
53
|
+| `username` | 对应 `sys_user.user_name`;不存在、已删除或已停用时登录失败;**无需**在若依中配置大屏菜单权限 |
|
|
53
|
54
|
|
|
54
|
55
|
**密钥生成**:可使用 [在线 RSA 密钥对工具](http://web.chacuo.net/netrsakeypair)(JSEncrypt 格式);生产建议 **2048 位**独立密钥对。
|
|
55
|
56
|
|
|
|
@@ -122,7 +123,7 @@ bigscreen:
|
|
122
|
123
|
| 未配置密钥 | 大屏免密登录未配置 RSA 密钥 |
|
|
123
|
124
|
| 密文为空 / 解密失败 / 明文非 UUID | 大屏登录认证失败 |
|
|
124
|
125
|
| 专用账号不存在 | 大屏专用账号不存在 |
|
|
125
|
|
-| 账号删除 / 停用 | 若依标准 `user.password.delete` / `user.blocked` |
|
|
|
126
|
+| 账号已删除 / 已停用 | 若依标准 `user.password.delete` / `user.blocked` |
|
|
126
|
127
|
|
|
127
|
128
|
---
|
|
128
|
129
|
|
|
|
@@ -131,18 +132,25 @@ bigscreen:
|
|
131
|
132
|
| 类 | 职责 |
|
|
132
|
133
|
| --- | --- |
|
|
133
|
134
|
| `ScreenLoginController` | 路由、`X-Screen-Token` / Body 取值 |
|
|
134
|
|
-| `ScreenLoginService` | 启用与密钥校验、解密验 UUID、加载专用用户、签发 JWT |
|
|
|
135
|
+| `ScreenLoginService` | 启用与密钥校验、解密验 UUID、校验专用用户状态、注入 `bigScreen:*:*`、签发 JWT |
|
|
|
136
|
+| `ScreenLoginPermissions` | 大屏免密登录固定权限集 |
|
|
135
|
137
|
| `ScreenLoginRsaSupport` | RSA 加解密、`UUID.fromString` 格式校验 |
|
|
136
|
138
|
| `ScreenLoginProperties` | 绑定 `bigscreen.login.*` |
|
|
137
|
139
|
| `ScreenLoginConfig` | `@EnableConfigurationProperties` |
|
|
138
|
140
|
|
|
139
|
141
|
**UUID 校验**:解密明文经 `UUID.fromString` 解析,须为标准 8-4-4-4-12 十六进制格式(大小写均可)。
|
|
140
|
142
|
|
|
|
143
|
+**权限说明**:
|
|
|
144
|
+
|
|
|
145
|
+- 签发 Token 时写入 `permissions = ["bigScreen:*:*"]`,与若依 `SecurityUtils.hasPermi` 通配规则一致。
|
|
|
146
|
+- `ruoyi-screen` 路由/导航为静态配置,登录成功即可访问全部大屏页面,**不依赖** `getInfo` / `getRouters`。
|
|
|
147
|
+- 若调用 `GET /getInfo`,若依会按数据库角色刷新权限;大屏场景建议**仅使用免密登录返回的 Token**,勿混用普通登录。
|
|
|
148
|
+
|
|
141
|
149
|
**安全说明**:
|
|
142
|
150
|
|
|
143
|
151
|
- 每次登录应生成**新 UUID** 再加密,避免重放固定密文(服务端当前仅校验格式,不存 nonce)。
|
|
144
|
152
|
- 私钥仅存服务端配置,禁止写入前端或版本库(生产用环境变量/密钥管理)。
|
|
145
|
|
-- 大屏看板接口仍依赖 JWT + `bigScreen:*:query` 权限,与免密登录入口分离。
|
|
|
153
|
+- 大屏看板接口依赖有效 JWT;权限由免密登录注入,**不要求** `screenviewer` 在若依菜单中逐项授权。
|
|
146
|
154
|
|
|
147
|
155
|
---
|
|
148
|
156
|
|
|
|
@@ -191,4 +199,4 @@ async function screenAutoLogin(apiBase) {
|
|
191
|
199
|
| 畜牧资源 | `/bigScreen/livestockResource` | `bigScreen:livestockResource:query` |
|
|
192
|
200
|
| 共同富裕 | `/bigScreen/commonProsperity` | `bigScreen:commonProsperity:query` |
|
|
193
|
201
|
|
|
194
|
|
-免密登录**不替代**上述权限校验;专用账号须在若依中配置对应菜单权限。
|
|
|
202
|
+免密登录**不替代** JWT 鉴权;专用账号须在 `sys_user` 中存在且状态正常,**无需**配置大屏菜单权限。
|