Files
apes-Authon-Server/README.md
T
figmar 93e13653ab Phase 1-3 完成:apes-commons 内联 + 包名重构 + 编译验证
Phase 1: apes-commons 内联
- 反推并实现 7 个核心类(Res/AuthContext/Login/LoginUser/LoginCustomer/UserSession/DbEntity)
- 新增 LoginAspect AOP 切面(从 Redis 读取会话写入 AuthContext)
- 移除外部 JAR 依赖,项目自包含可独立编译

Phase 2: 包名重构
- cn.apes.cloud → cn.apes.authon 全局包名重构
- @MapperScan 路径更新
- 零 cn.apes.cloud 残留

Phase 3: 编译验证
- maven-compiler-plugin 升级至 3.13.0(兼容 Java 24)
- Lombok 升级至 1.18.40(兼容 Java 24)
- 移除 syncAllTenantsToHuoban(伙伴云同步,非账权核心)
- 新增 IpLocationService 接口 + 桩实现
- 124 个源文件编译通过(BUILD SUCCESS)
2026-08-09 08:40:36 +08:00

7.3 KiB
Raw Blame History

apes-Authon — 账权独立服务

从 saas-service(账权平台)提取的纯净认证/授权/用户/角色/权限/多租户体系
已通过编译验证,可作为独立微服务运行

项目背景

本项目源自 saas-service(账权平台)单体应用,经过耦合度分析确认账权模块与业务模块零直接 Service 调用,具备独立服务化条件。本仓库是提取后的纯净账权代码,不包含任何业务逻辑(溯源、称重、水肥、巡检、维修、农大同步等)。

提取依据

  • AuthContext 被 52 个文件 / 111 处引用,但业务 Service → 账权 Service 直接调用为 0 个
  • 账权模块仅通过 ThreadLocalAuthContext)与业务模块间接耦合
  • 新增业务模块(如巡检、维修)均不直接调用账权 Service,验证了独立服务化的可行性

技术栈

组件 版本 用途
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 中)
  • 移除外部 JAR 依赖,pom.xml 无需手动安装

Phase 2: 包名重构

  • cn.apes.cloudcn.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: SDK 化

  • AuthContext 改造为可远程调用的 SDK
  • 提供 authon-sdk 模块供业务系统引用
  • Token 校验改为 HTTP API 调用

Phase 5: 网关集成

  • 接入 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

编译方式

# 直接编译(无需安装外部 JAR
mvn clean compile

# 打包
mvn clean package -DskipTests

# 运行
java -jar target/apes-authon.jar

服务默认端口 8090context-path /authon

关联仓库

  • 源仓库:apes-Authdata — 完整单体应用(含业务代码)
  • 方案文档:docs/账权模块独立服务化方案.html(在 apes-Authdata 仓库中)
  • 源码对比:docs/源码版本对比分析-20260809.md(在 apes-Authdata 仓库中)