服务治理管理平台后端工程。当前采用 Maven 多模块结构,已落地 auth-service,提供后台管理接口、服务间授权校验接口、SmartDoc 导入、授权配置、日志查询和看板数据能力。
- JDK 21
- Spring Boot 4.0.2
- Spring Cloud 2025.1.1
- MyBatis 4.0.0
- Oracle 10g 兼容脚本,JDBC 驱动使用
ojdbc11 - Knife4j / OpenAPI 注解
- JUnit 5、Mockito、MockMvc、JaCoCo
service-governance-backend/
├── pom.xml # 父工程
└── auth-service/
├── pom.xml
└── src/
├── main/java/com/servicegovernance/auth
│ ├── controller # 接口层
│ ├── service # 业务接口
│ ├── service/impl # 业务实现
│ ├── mapper # MyBatis Mapper
│ ├── dto / query / vo # 请求、查询、响应对象
│ ├── entity # 数据库结果映射对象
│ └── common # 拦截器、异常、工具、配置
└── main/resources
├── application.yml
├── mapper # MyBatis XML
└── db/oracle # Oracle 建表、迁移、初始化、测试数据脚本
数据库连接配置在 auth-service/src/main/resources/application.yml,提交文档中只保留占位示例,真实地址和账号密码请使用本地配置或环境变量管理:
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@<host>:<port>:<sid>
username: <db-username>
password: <db-password>主要脚本:
| 文件 | 用途 |
|---|---|
service-governance-schema.sql |
初始化建表脚本,包含主键、联合主键、索引、序列和触发器 |
service-governance-migration.sql |
已有库结构迁移脚本,尽量避免重复创建对象 |
service-governance-test-data.sql |
演示和压测用业务数据 |
auth-user-init.sql |
初始化后台登录用户 |
service-governance-createindex.sql |
索引和历史补充脚本 |
service-governance-alter.sql |
历史字段补充脚本 |
核心表包括:
APP_INFO:服务应用API_INFO:API 资产APP_API_AUTH:调用方应用和被调用 API 的授权关系,联合主键为CALLER_APP_ID + API_IDAPI_VERSION:SmartDoc 导入版本API_LOG:API 导入/变更记录AUTH_LOG:授权配置历史CALL_DECISION_LOG:运行时调用校验历史USER_INFO:后台用户SYS_SETTING:系统设置
在后端根目录执行:
cd service-governance-backend
mvn -pl auth-service spring-boot:run默认端口:8081。
健康检查:
curl http://localhost:8081/api/health
curl http://localhost:8081/actuator/health/api/health 和 /actuator/health 都不需要 sessionToken,可用于本地启动和部署健康检查。
运行测试:
mvn -pl auth-service test后台管理接口统一使用 sessionToken 请求头。
- 登录:
curl -sS -H "Content-Type: application/json" \
-d '{"username":"<username>","password":"<password>"}' \
http://localhost:8081/api/auth/login- 后续后台接口携带:
sessionToken: 登录接口返回的 sessionToken
运行时服务接口不依赖后台登录态:
POST /api/authorization/check:服务调用前校验调用方和被调用方身份及授权关系,会写入CALL_DECISION_LOGPOST /api/authorization/resource/list:接收方服务通过Authorization: Basic xxxxxx拉取调用方可访问的urlList
/api/authorization/resource/list 返回:
{
"urlList": ["/api/example/path"]
}| 模块 | 路径前缀 | 说明 |
|---|---|---|
| 认证管理 | /api/auth |
登录、退出、会话校验 |
| 首页看板 | /api/dashboard |
总览、授权设置、授权拓扑图 |
| APP 管理 | /api/app |
APP 列表、详情、新增、更新、删除、选项 |
| API 管理 | /api/apis |
API 列表、详情、新增、更新、删除、导出、搜索选项 |
| SmartDoc 导入 | /api/smartdoc |
SmartDoc 分析和确认导入 |
| 单应用授权 | /api/authorization/single-app |
从调用方/被调用方维度维护授权 |
| API 反向授权 | /api/authorization/reverse |
从 API 维度维护授权应用 |
| 运行时授权访问 | /api/authorization/check、/api/authorization/resource/list |
服务间调用校验和资源列表 |
| 权限配置历史 | /api/logs/auth-config |
授权变更日志 |
| SmartDoc 导入历史 | /api/logs/smartdoc-import |
文档导入日志 |
| 远程调用历史 | /api/logs/remote-call |
运行时授权判定日志 |
校验成功示例:
curl -sS -H "Content-Type: application/json" \
-d '{
"callerAppCode": "<caller-app-code>",
"callerPwd": "<caller-app-password>",
"calleeAppCode": "<callee-app-code>",
"calleePwd": "<callee-app-password>"
}' \
http://localhost:8081/api/authorization/check校验失败示例:
curl -sS -H "Content-Type: application/json" \
-d '{
"callerAppCode": "<caller-app-code>",
"callerPwd": "<wrong-password>",
"calleeAppCode": "<callee-app-code>",
"calleePwd": "<callee-app-password>"
}' \
http://localhost:8081/api/authorization/check拉取授权 URL 列表示例:
curl -sS -H "Content-Type: application/json" \
-H "Authorization: Basic <base64-callee-password>" \
-d '{
"callerAppCode": "<caller-app-code>",
"calleeAppCode": "<callee-app-code>"
}' \
http://localhost:8081/api/authorization/resource/list其中 <base64-callee-password> 是被调用方应用密码的 Base64 编码值。
项目已引入 Knife4j OpenAPI 依赖和 Swagger 注解。后端启动后可尝试访问:
http://localhost:8081/doc.html
http://localhost:8081/v3/api-docs
- 前端提示未登录:确认请求头是否携带
sessionToken,以及后端是否能连接数据库校验会话。 - 登录后刷新页面未登录:确认
/api/auth/session/check可访问,且USER_INFO.SESSION_TOKEN未被清空。 /api/authorization/check返回FAIL:检查APP_INFO中调用方和被调用方是否存在、密码是否正确。/api/authorization/resource/list返回空数组:检查调用方和被调用方之间是否存在有效授权。- IDEA 控制台看不到 SQL:确认
mybatis.configuration.log-impl为org.apache.ibatis.logging.stdout.StdOutImpl。