Files
apes-Authon-Server/README.md
T

7.7 KiB
Raw Blame History

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.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: 提交推送

  • 代码推送到 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

编译方式

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

# 打包
mvn clean package -DskipTests

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

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

关联仓库

仓库 说明 地址
apes-Authon-Server 后端账权服务(本仓库) https://gitea.apescale.com/APES/apes-Authon-Server
apes-Authon-Web 前端账权管理 https://gitea.apescale.com/APES/apes-Authon-Web
apes-Authon-history 剥离历史与分析归档 https://gitea.apescale.com/APES/apes-Authon-history

License

MIT