轻量级数据服务平台:提供 HBase 表元数据管理、动态查询、用户权限控制、查询历史追溯等功能。支持多角色细粒度表级权限,适用于大数据开发、数据分析场景下的快速数据探查与权限管控。
- ✅ 用户认证与授权:JWT 登录,支持角色(管理员/分析师/访客)
- ✅ 表元数据管理:动态注册 HBase 表,维护列族、描述、数据来源(Kafka Topic 等)
- ✅ 动态数据查询:支持选择表、RowKey 范围、列族/列,返回 JSON 结果
- ✅ 查询历史:记录每次查询参数、结果行数、耗时,支持复用查询条件
- ✅ 权限管理:基于角色的表级权限控制(READ/WRITE/ADMIN),前端菜单/按钮动态展示
- ✅ 用户管理:管理员可创建/编辑/禁用用户,分配角色,重置密码
- ✅ 缓存加速:Redis 缓存查询结果,提升响应速度(手动缓存管理,避免权限绕过)
- ✅ 前后端权限联动:非管理员不显示用户管理、权限管理入口;根据表权限显示编辑/删除按钮
- ✅ API 文档:集成 SpringDoc OpenAPI,访问
/swagger-ui.html查看接口文档(后续规划中已包含)
| 模块 | 技术 |
|---|---|
| 后端 | Spring Boot 3.1.3, Spring Security, Spring Data JPA, HBase Client 2.4.11, Jedis 4.4.3, MySQL 8.0, JWT |
| 前端 | Vue 3.5.27, Vite 4.5.14, Element Plus, Axios |
| 数据存储 | HBase 2.4.11, MySQL 8.0, Redis 5.0.7 |
| 部署环境 | 伪分布式(Hadoop 3.2.4, ZooKeeper 3.7.1) |
- JDK 17
- Maven 3.8+
- Node.js 18.20 + npm
- MySQL 8.0(已创建数据库
data_service) - Redis 5.0(已启动)
- HBase 2.4.11(已启动,ZooKeeper 连接正常)
# 进入后端目录
cd backend
# 初始化数据库(如果未执行)
mysql -u root -p < scripts/init-db.sql
# 修改配置文件 src/main/resources/application.yml
# - 更新 MySQL 用户名/密码
# - 确认 HBase ZooKeeper 地址
# - 确认 Redis 地址
# 编译打包
mvn clean package
# 启动服务
java -jar target/data-service-gateway-1.0.0.jar默认端口:2006(可在 application.yml 中修改)
# 进入前端目录
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev访问 http://localhost:2005,使用默认管理员账号登录:admin / 123456
data-service-gateway/
├── backend/ # Spring Boot 后端
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/example/dataservice/
│ │ │ │ ├── config/ # 安全配置、HBase/Redis 配置
│ │ │ │ ├── controller/ # API 控制器
│ │ │ │ ├── model/ # 实体类、DTO
│ │ │ │ ├── repository/ # JPA 仓库
│ │ │ │ ├── security/ # JWT 工具、UserDetails
│ │ │ │ └── service/ # 业务逻辑
│ │ │ └── resources/
│ │ │ ├── application.yml
│ │ │ └── db/migration/ # SQL 脚本(可选)
│ │ └── test/
│ ├── scripts/ # 数据库初始化脚本
│ ├── pom.xml
│ └── docs/ # 接口文档(Swagger 后续加入)
├── frontend/ # Vue 3 前端
│ ├── public/
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ │ ├── Login.vue
│ │ │ ├── Tables.vue # 表管理与查询
│ │ │ ├── Users.vue # 用户管理
│ │ │ ├── QueryHistory.vue # 查询历史
│ │ │ └── Permission.vue # 权限管理
│ │ ├── store/ # 权限状态管理
│ │ │ └── permissions.js
│ │ ├── router/ # 路由配置
│ │ ├── App.vue
│ │ └── main.js
│ ├── index.html
│ ├── package.json
│ ├── vite.config.js
│ └── README.md
├── docker-compose.yml
├── .gitignore
└── README.md
- 登录接口
/api/auth/login返回 JWT token。 - 前端存储 token,后续请求携带在
Authorization: Bearer <token>头中。 - 后端通过
JwtAuthenticationFilter解析 token,构建SecurityContext。 - 角色分为
ROLE_ADMIN、ROLE_ANALYST、ROLE_VIEWER,权限方法级控制(@PreAuthorize)。
- 管理员可增删改 HBase 表元信息(表名、列族、描述、数据来源)。
- 前端表管理页面展示所有已注册表,根据当前用户权限显示操作按钮。
- 选择表后自动加载该表的列族(从元数据获取),可勾选列族或输入具体列。
- 后端支持两种列格式:
family:(返回该列族所有列)和family:qualifier(返回指定列)。 - 查询结果以表格形式展示,支持导出 JSON。
- 每次查询(成功)自动记录到
query_history表,包含用户名、表名、参数、结果行数、耗时。 - 历史页面分页展示,点击“复用”可跳转到表管理并填充查询条件。
- 管理员在权限管理页面为角色分配对某张表的权限(READ/WRITE/ADMIN)。
- 前端登录后调用
/api/users/permissions获取当前用户的所有表权限,存入全局 store。 - 根据权限动态控制菜单、按钮、查询入口的显示与禁用。
- 使用 Redis 手动缓存查询结果,缓存 key 包含用户名和请求参数,确保不同用户隔离。
- 每次查询先执行权限检查,再查缓存;权限变更时自动清理对应表的缓存,避免权限残留。
在表详情页增加“数据血缘”标签,以图谱形式展示 HBase 表与 Kafka Topic 的依赖关系。
- 后端:扩展
hbase_table_meta表,增加source_type和source_details字段(如kafka:user_behavior);新增接口/api/lineage/table/{tableId}返回节点和边数据。 - 前端:集成 ECharts,使用 Graph 图表渲染,点击节点可查看详情。
基于现有查询历史数据,增加监控看板。
- 后端:
- 在
QueryHistory中增加status(成功/失败)、error_msg字段。 - 定时任务(如每小时)统计:查询次数、平均耗时、热门表、慢查询(>3s)列表。
- 慢查询告警:通过邮件或 WebSocket 实时通知管理员。
- 在
- 前端:增加监控页面,展示图表(ECharts 折线图/柱状图)和慢查询列表。
- 引入
springdoc-openapi-starter-webmvc-ui依赖。 - 为 Controller 添加
@Operation、@ApiResponse注解。 - 访问
/swagger-ui.html自动生成交互式 API 文档。
欢迎提交 Issue 或 Pull Request。请确保代码风格一致,并编写必要的单元测试。
MIT 本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。