Files
apes-Authon-Server/README.md
T
2026-08-09 08:06:26 +08:00

7.7 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 通用工具
apes-commons 0.0.7-SNAPSHOT 认证核心(AuthContext / @Login / Res / DbEntity

代码结构

src/main/java/cn/apes/
├── AuthonApplication.java          # 主启动类
└── cloud/
    ├── 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/                     # 6 个 Service 接口
    │   └── impl/                    # 16 个 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 加解密工具

模块说明

1. 用户认证

  • 密码登录UserController.loginPwd()UserInfoServiceImpl → Redis 会话
  • 多企业切换UserController.selectCustomer() → 切换 Redis 中的企业上下文
  • 企业认证UserController.certifyEnterprise() → 提交企业资质
  • 注册/改密UserController.register() / UserController.updatePwd()

2. RBAC 权限模型

AppInfo(应用)
  └── SysMenu(菜单)── SysPermission(权限码)
        └── SysRole(角色)── SysRolePermission(角色-权限关联)
              └── SysMemberRole(成员-角色关联)
  • 菜单树:PermissionController.menuTree()
  • 权限码:PermissionController.permissionCodes()
  • 角色管理:PermissionController 的 role CRUD
  • 成员角色:PermissionController 的 member-role 分配

3. 多租户管理

  • 数据源切换@TenantSource 注解 + DataSourceHeaderAspect AOP,从 X-Tenant-ID 请求头读取数据源标识
  • 租户隔离:业务数据通过 AuthContext.getLoginInfo().getCustomer().getId() 获取 customerId 过滤

4. 外部 API 鉴权

  • AccessTokenFilterorder=1)拦截所有请求
  • 校验 X-Access-Token / Bearer Token
  • 校验通过后将用户/企业信息写入 Redis,使 @Login AOP 正常工作

5. SSO 单点登录

  • 伙伴云 SSO V1SsoServiceImpl → HMAC-SHA256 签名 → 伙伴云 /sso/get_token
  • 伙伴云 SSO V2Sso2ServiceImpl → 同上,不同 baseUrl

6. 套餐与配额

SysPackagePlan(套餐方案)── SysPackagePlanPermission(套餐-权限)
                           └── SysPackagePlanQuota(套餐-配额)
CustomerPackage(客户套餐)── CustomerPackageQuota(客户配额)
                           └── CustomerPackageExtendApply(延期申请)
SysQuota(配额模板)

外部依赖

apes-commons JAR

本服务依赖 cn.apes:apes-commons:0.0.7-SNAPSHOT,提供以下核心类:

说明
AuthContext ThreadLocal 认证上下文,存储 UserSession
UserSession 会话对象(LoginUser + LoginCustomer
LoginUser 登录用户信息
LoginCustomer 登录客户/企业信息
@Login 方法级注解,AOP 自动注入登录信息
Res 统一 API 响应包装
DbEntity 基础实体(id / createTime / updateTime / isDel

安装方式:将 apes-commons-0.0.7-SNAPSHOT.jar 安装到本地 Maven 仓库:

mvn install:install-file \
  -Dfile=apes-commons-0.0.7-SNAPSHOT.jar \
  -DgroupId=cn.apes \
  -DartifactId=apes-commons \
  -Dversion=0.0.7-SNAPSHOT \
  -Dpackaging=jar

启动方式

# 1. 安装 apes-commons JAR
mvn install:install-file -Dfile=apes-commons-0.0.7-SNAPSHOT.jar ...

# 2. 编译打包
mvn clean package -DskipTests

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

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

待完成事项

Phase 1: 验证编译(当前)

  • 安装 apes-commons JAR 后验证编译通过
  • 补充缺失的 MyBatis XML(如有)
  • 编写基础单元测试

Phase 2: 包名重构

  • cn.apes.cloudcn.apes.authon 全局包名重构
  • 调整 MapperScan 路径
  • 更新所有 import

Phase 3: SDK 化

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

Phase 4: 网关集成

  • 接入 API 网关(Spring Cloud Gateway / Nginx
  • 请求头注入认证信息(替代 ThreadLocal
  • 多租户数据源改为网关路由模式

从原项目提取的文件清单

共提取 114 个 Java 文件

类型 数量
Controller 11
Entity 23
DTO 12
VO 3
Service 接口 6
Service 实现 16
Mapper 23
Config 5
Filter 1
Util 2
Huoban DTO 11
主启动类 1

关联仓库

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