diff --git a/README.md b/README.md index 9c05bdb..54e285a 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,6 @@ cd server ```properties # application.properties active=dev - # application-dev.properties server.port=8080 database.host=127.0.0.1 @@ -103,22 +102,22 @@ npm run dev import "kenaito-conf/kenaito-conf-go-client" cfg := &client.Config{ - BaseURL: "http://localhost:8080", - AppName: "myapp", - Env: "dev", - Version: "latest", - Token: "app-token", - SyncInterval: 30, - CacheDir: ".", +BaseURL: "http://localhost:8080", +AppName: "myapp", +Env: "dev", +Version: "latest", +Token: "app-token", +SyncInterval: 30, +CacheDir: ".", } c := client.New(cfg) // 注册变更回调 -c.OnChange(func(changed map[string]string) { - for k, v := range changed { - fmt.Printf("%s = %s\n", k, v) - } +c.OnChange(func (changed map[string]string) { +for k, v := range changed { +fmt.Printf("%s = %s\n", k, v) +} }) // 启动(拉取全量配置 + 开启定时同步) @@ -136,6 +135,7 @@ dbHost := c.Get("db.host") **1. 引入依赖** ```xml + cn.odboy kenaito-conf-springboot2-client @@ -157,6 +157,7 @@ kenaito.config.sync-interval-seconds=30 **3. 使用配置** ```java + @Value("${your.config.key}") private String configValue; ``` @@ -170,6 +171,7 @@ private String configValue; **1. 引入依赖** ```xml + cn.odboy kenaito-conf-springboot3-client @@ -206,11 +208,13 @@ config = Config( client = ConfigClient(config) + # 监听配置变更 def on_change(changed): for k, v in changed.items(): print(f"config changed: {k} = {v}") + client.on_change(on_change) # 启动客户端(拉取配置 + 开启定时同步) @@ -244,22 +248,22 @@ npm link kenaito-conf **2. 使用** ```javascript -import { Config, ConfigClient } from 'kenaito-conf'; +import {Config, ConfigClient} from 'kenaito-conf'; const config = new Config({ - baseUrl: 'http://localhost:8080', - appName: 'my-app', - env: 'daily', - syncInterval: 30, + baseUrl: 'http://localhost:8080', + appName: 'my-app', + env: 'daily', + syncInterval: 30, }); const client = new ConfigClient(config); // 监听配置变更 client.onChange((changed) => { - for (const [k, v] of Object.entries(changed)) { - console.log(`config changed: ${k} = ${v}`); - } + for (const [k, v] of Object.entries(changed)) { + console.log(`config changed: ${k} = ${v}`); + } }); // 启动客户端(拉取配置 + 开启定时同步) @@ -317,7 +321,8 @@ $all = $client->getAll(); **1. 引入依赖** ```xml - + + ``` **2. 使用** @@ -495,63 +500,54 @@ value = client.get('database.host') ### 管理端 API(需 JWT 认证) -| 方法 | 路径 | 说明 | -|------|------|------| -| POST | `/user/login` | 登录 | -| GET | `/user/loginUserInfo` | 当前用户信息 | -| POST | `/user/logout` | 登出 | -| GET | `/admin/menus` | 菜单 | -| POST | `/admin/config/list` | 配置列表 | -| POST | `/admin/config/add` | 新增配置 | -| POST | `/admin/config/update` | 更新配置 | -| GET | `/admin/config/:id` | 配置详情 | -| POST | `/admin/config/delete/:id` | 删除配置 | -| GET | `/admin/config/configHistories/:id` | 配置历史 | -| POST | `/admin/config/rollback/:id` | 回滚配置 | -| POST | `/admin/app/list` | 应用列表 | -| POST | `/admin/app/add` | 新增应用 | -| POST | `/admin/app/update` | 更新应用 | -| POST | `/admin/app/delete/:id` | 删除应用 | -| POST | `/admin/app/switch/:id` | 切换应用状态 | -| GET | `/admin/app/tree` | 应用树 | -| GET | `/admin/app/options` | 应用选项 | -| GET | `/admin/user/list` | 用户列表 | -| POST | `/admin/user/add` | 新增用户 | -| POST | `/admin/user/update` | 更新用户 | -| POST | `/admin/user/delete/:id` | 删除用户 | -| POST | `/admin/user/resetPassword/:id` | 重置密码 | -| POST | `/admin/user/switch/:id` | 切换用户状态 | -| GET | `/admin/group/list` | 业务组列表 | -| POST | `/admin/group/add` | 新增业务组 | -| POST | `/admin/group/update` | 更新业务组 | -| GET | `/admin/group/options` | 业务组选项 | -| GET | `/admin/profile/list` | 环境列表 | -| POST | `/admin/profile/add` | 新增环境 | -| POST | `/admin/profile/update` | 更新环境 | -| POST | `/admin/profile/delete/:id` | 删除环境 | -| POST | `/admin/profile/switch/:id` | 切换环境状态 | -| GET | `/admin/profile/options` | 环境选项 | +| 方法 | 路径 | 说明 | +|------|-------------------------------------|--------------------------| +| POST | `/user/login` | 登录 | +| GET | `/user/loginUserInfo` | 当前用户信息 | +| POST | `/user/logout` | 登出 | +| GET | `/admin/menus` | 菜单 | +| POST | `/admin/config/list` | 配置列表(支持按环境、应用筛选) | +| POST | `/admin/config/add` | 新增配置 | +| POST | `/admin/config/update` | 更新配置 | +| GET | `/admin/config/:id` | 配置详情 | +| POST | `/admin/config/delete/:id` | 删除配置 | +| GET | `/admin/config/configHistories/:id` | 配置历史 | +| POST | `/admin/config/rollback/:id` | 回滚配置 | +| POST | `/admin/app/list` | 应用列表(分页) | +| GET | `/admin/app/:id` | 应用详情 | +| POST | `/admin/app/add` | 新增应用 | +| POST | `/admin/app/update` | 更新应用 | +| POST | `/admin/app/delete/:id` | 删除应用(软删除) | +| POST | `/admin/app/switch/:id` | 切换应用状态 | +| POST | `/admin/app/generateToken/:id` | 生成应用 Token | +| POST | `/admin/app/deleteToken/:id` | 删除应用 Token | +| GET | `/admin/app/options` | 应用选项(下拉框) | +| GET | `/admin/user/list` | 用户列表(支持按用户名、类型、所属组、状态筛选) | +| POST | `/admin/user/add` | 新增用户 | +| POST | `/admin/user/update` | 更新用户 | +| POST | `/admin/user/delete/:id` | 删除用户(软删除) | +| POST | `/admin/user/resetPassword/:id` | 重置密码 | +| POST | `/admin/user/switch/:id` | 切换用户状态 | +| GET | `/admin/user/options` | 用户选项(下拉框) | +| GET | `/admin/group/list` | 业务组列表 | +| GET | `/admin/group/get/:id` | 业务组详情 | +| POST | `/admin/group/add` | 新增业务组 | +| POST | `/admin/group/update` | 更新业务组 | +| POST | `/admin/group/switch/:id` | 切换业务组状态 | +| GET | `/admin/group/options` | 业务组选项(下拉框) | +| GET | `/admin/profile/list` | 环境列表 | +| GET | `/admin/profile/:id` | 环境详情 | +| POST | `/admin/profile/add` | 新增环境 | +| POST | `/admin/profile/update` | 更新环境 | +| POST | `/admin/profile/delete/:id` | 删除环境 | +| POST | `/admin/profile/switch/:id` | 切换环境状态 | +| GET | `/admin/profile/options` | 环境选项(下拉框) | -### 客户端 API(无需 JWT) +### 客户端 API(无需 JWT,通过应用 Token 鉴权) -| 方法 | 路径 | 说明 | -|------|------|------| -| GET | `/api/fetchAllConfigs` | 全量拉取配置 | +| 方法 | 路径 | 说明 | +|------|----------------------------|--------| +| POST | `/api/fetchAllConfigs` | 全量拉取配置 | | POST | `/api/fetchChangedConfigs` | 增量拉取变更 | -| GET | `/api/ping` | 健康检查 | +| GET | `/api/ping` | 健康检查 | -## 加密说明 - -配置值支持 AES 加密存储(`{Cipher}xxx` 格式),客户端自动解密: - -- **算法**: AES-128/CBC/ZeroIV + PKCS7 填充 -- **密钥派生**: `MD5(secretKey + appId_hex + env)` 取后 16 字节 -- Go 客户端和 Java 客户端使用相同的加密方案,确保跨语言兼容 - -## 与原 Java 版的差异 - -- **去掉了 ZooKeeper**:配置变更通知改为客户端定时轮询 -- **认证方式**:管理端用 JWT,客户端 API 通过 Token 鉴权 -- **前端**:从 layui 静态页面改为 Vue 2 + Element UI 前后端分离 -- **加密算法**:保持 AES 兼容,Java 客户端可继续使用 -- **自动建表**:服务端启动时通过 xorm Sync2 自动创建表结构,无需手动执行 SQL