Files

187 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# apes-Authon-Server — 账权独立服务后端
> Spring Boot 独立账权服务平台 — 认证 / 授权 / 用户 / 角色 / 权限 / 多租户 / SSO
> **已通过编译验证**,可作为独立微服务运行
## 项目背景
apes-Authon 是一套从单体应用中提取的纯净认证授权服务,包含完整的用户管理、角色权限、菜单体系、多租户、客户套餐和 SSO 单点登录能力。本服务与业务系统零直接耦合,通过 Token + Redis 会话实现独立认证。
### 核心特性
- **多租户架构**:基于 `@TenantSource` AOP 切面 + dynamic-datasource 实现运行时数据源切换
- **认证体系**`@Login` 注解 + `AuthContext` ThreadLocal + Redis 会话,业务代码无感知
- **权限模型**:菜单 → 权限码 → 角色 → 成员角色的四级权限体系
- **SSO 集成**:内置伙伴云单点登录 Token 交换
- **外部 API 鉴权**AccessToken 机制,支持 Bearer / X-Access-Token 两种方式
## 技术栈
| 组件 | 版本 | 用途 |
|------|------|------|
| Spring Boot | 2.2.1.RELEASE | Web 框架 |
| Java | 11 | 运行时 |
| MyBatis Plus | 3.5.7 | ORM |
| dynamic-datasource | 3.6.1 | 多租户数据源切换 |
| Redisson | 3.35.0 | Redis 客户端 / 分布式锁 |
| Hutool | 5.8.16 | 通用工具 |
| Lombok | 1.18.40 | 代码简化 |
## 代码结构
```
src/main/java/cn/apes/
├── AuthonApplication.java # 主启动类
├── commons/ # apes-commons 内联实现(原外部 JAR
│ ├── Res.java # 统一 API 响应封装
│ ├── auth/
│ │ ├── AuthContext.java # ThreadLocal 认证上下文
│ │ ├── Login.java # @Login 注解
│ │ ├── LoginAspect.java # 登录认证 AOP 切面
│ │ ├── LoginUser.java # 登录用户信息
│ │ ├── LoginCustomer.java # 登录客户/企业信息
│ │ └── UserSession.java # 会话对象
│ └── domain/
│ └── DbEntity.java # 基础实体(id/createTime/updateTime/isDel
└── authon/ # 账权业务代码
├── controller/ # 11 个 Controller
│ ├── UserController.java # 用户认证(登录/注册/改密/多企业切换)
│ ├── PermissionController.java # 权限管理(菜单/权限码/角色/成员角色)
│ ├── AccessTokenController.java # 外部 API Token 管理
│ ├── CustomerController.java # 客户/企业管理
│ ├── CustomerPackageController.java # 客户套餐管理
│ ├── AppController.java # 应用管理
│ ├── SysOrganizationController.java # 组织架构
│ ├── SysPackagePlanController.java # 套餐方案
│ ├── SysQuotaController.java # 配额模板
│ ├── SysOperationLogController.java # 操作日志
│ └── UserPreferenceController.java # 用户偏好
├── domain/
│ ├── entity/ # 23 个实体类
│ ├── dto/ # 12 个 DTO(含公共 PageDTO
│ ├── vo/ # 3 个 VO
│ └── huoban/ # 11 个伙伴云 API 模型(SSO 依赖)
├── service/ # 7 个 Service 接口
│ └── impl/ # 18 个 Service 实现
├── mapper/ # 23 个 Mapper
├── config/ # 5 个配置类
│ ├── AccessTokenFilterConfig.java # Token 过滤器注册
│ ├── DataSourceHeaderAspect.java # 多租户数据源 AOP 切面
│ ├── TenantSource.java # @TenantSource 注解
│ ├── HbTokenContext.java # 伙伴云 Token ThreadLocal
│ └── SiteConfig.java # 站点配置
├── filter/
│ └── AccessTokenFilter.java # 外部 API 鉴权过滤器
└── util/
├── OperationLogUtil.java # 操作日志工具
└── RsaUtil.java # RSA 加解密工具
```
## apes-commons 内联说明
`apes-commons 0.0.7-SNAPSHOT` 外部 JAR 已内联为 `cn.apes.commons` 包,共 8 个类:
| 类 | 说明 |
|----|------|
| `Res` | 统一 API 响应包装(success/fail/error/get |
| `AuthContext` | ThreadLocal 认证上下文,存储 UserSession |
| `UserSession` | 会话对象(LoginUser + LoginCustomer + token |
| `LoginUser` | 登录用户信息(id/nickName/phone/portrait/email |
| `LoginCustomer` | 登录客户/企业信息(id/customerName/customerType... |
| `@Login` | 方法/类级注解,AOP 自动注入登录信息 |
| `LoginAspect` | 登录认证 AOP 切面(从 Redis 读取会话 → 写入 AuthContext |
| `DbEntity` | 基础实体(id / createTime / updateTime / isDel |
**LoginAspect 工作流程**
1. 拦截 `@Login` 注解的 Controller 类/方法
2. 从请求头读取 `token`
3. 查 Redis 获取用户信息(key=token)和客户信息(key=token:customer
4. 组装 `UserSession` 写入 `AuthContext` ThreadLocal
5. 业务方法执行完毕后清理 `AuthContext`
## 已完成的阶段
### Phase 1: apes-commons 内联 ✅
- 反推 7 个核心类接口(AuthContext/Login/LoginUser/LoginCustomer/UserSession/Res/DbEntity
- 实现 LoginAspect AOP 切面
- 移除外部 JAR 依赖,pom.xml 无需手动安装
### Phase 2: 包名重构 ✅
- `cn.apes.cloud``cn.apes.authon` 全局包名重构
- `@MapperScan` 路径更新
- application.yml 配置更新
-`cn.apes.cloud` 残留
### Phase 3: 编译验证 ✅
- maven-compiler-plugin 升级至 3.13.0(兼容 Java 24
- Lombok 升级至 1.18.40(兼容 Java 24
- 移除 `syncAllTenantsToHuoban()` 伙伴云同步(业务集成,非账权核心)
- 创建 `IpLocationService` 接口 + 桩实现
- **124 个源文件编译通过**
### Phase 4: 提交推送 ✅
- 代码推送到 Gitea 组织仓库
## 待完成事项
### Phase 5: 模块补充
- [ ] AI 助手/LLM 模块提取(~54 Java 文件)
- [ ] 伙伴云表单配置模块提取(5 Controller + 7 .vue + 1 API
### Phase 6: SDK 化
- [ ]`AuthContext` 改造为可远程调用的 SDK
- [ ] 提供 `authon-sdk` 模块供业务系统引用
- [ ] Token 校验改为 HTTP API 调用
### Phase 7: 网关集成
- [ ] 接入 API 网关(Spring Cloud Gateway / Nginx
- [ ] 请求头注入认证信息(替代 ThreadLocal
- [ ] 多租户数据源改为网关路由模式
## 从原项目提取的文件清单
**124 个 Java 文件**(含 8 个内联 commons 类 + 2 个新增桩实现):
| 类型 | 数量 |
|------|------|
| Controller | 11 |
| Entity | 23 |
| DTO | 12 |
| VO | 3 |
| Service 接口 | 7 |
| Service 实现 | 18 |
| Mapper | 23 |
| Config | 5 |
| Filter | 1 |
| Util | 2 |
| Huoban DTO | 11 |
| commons 内联 | 8 |
| 主启动类 | 1 |
## 编译方式
```bash
# 直接编译(无需安装外部 JAR
mvn clean compile
# 打包
mvn clean package -DskipTests
# 运行
java -jar target/apes-authon.jar
```
服务默认端口 `8090`context-path `/authon`
## 关联仓库
| 仓库 | 说明 | 地址 |
|------|------|------|
| apes-Authon-Server | 后端账权服务(本仓库) | https://gitea.apescale.com/apes-Arise/apes-Authon-Server |
| apes-Authon-Web | 前端账权管理 | https://gitea.apescale.com/apes-Arise/apes-Authon-Web |
| apes-Authon-history | 剥离历史与分析归档 | https://gitea.apescale.com/apes-Arise/apes-Authon-history |
## License
MIT