# G2rain 架构设计
本文是 谷雨开源 SaaS 平台(G2rain) 的整体架构说明,与作者在 CSDN 上的项目架构系列文章互为补充,建议对照阅读:
下文在本站仓库已开源模块的基础上,从「目标—分层—数据与安全—工程化」四条主线归纳要点,便于新人建立全局心智模型;细节以各子模块文档为准。
# 1. 平台目标与边界
G2rain 面向 多租户 SaaS 基座 场景,核心诉求可概括为:
| 维度 | 说明 |
|---|---|
| 接入 | 业务以「子应用」形态接入,前后端可独立演进。 |
| 权限 | 用 资源模型(页面 / 页面元素 / API 端点)驱动可见性与鉴权,而非硬编码菜单与接口列表。 |
| 安全 | 统一 IAM(OAuth2/OIDC + JWT),边缘侧配合 DPoP、签名、网关过滤器链,形成纵深防护。 |
| 交付 | 通过 脚手架、Maven 插件、代码/配置生成 降低重复劳动,保持模块边界清晰。 |
边界上:基座提供认证、网关、资源与权限、基础设施类能力;具体行业业务(如 CMS、CRM 等)在业务域扩展,与本站「业务扩展」文档规划一致。
# 2. 逻辑分层:从浏览器到微服务
整体可抽象为下图(概念视图):
flowchart TB
subgraph client [浏览器 / 终端]
Shell[g2rain-main-shell<br/>qiankun 主应用]
Sub[子应用 manager-app / 业务子应用]
Shell --> Sub
end
subgraph edge [边缘与入口]
GW[g2rain-gateway<br/>WebMVC / WebFlux]
OR[OpenResty / Nginx + Lua<br/>可选:请求签名等]
end
subgraph platform [平台服务]
IAM[g2rain-iam<br/>OAuth2 / JWT / 会话]
BASIS[g2rain-basis<br/>资源 / 权限 / 账号上下文]
INFRA[g2rain-infra<br/>路由定义 / 字典 / i18n / ID]
end
Shell --> GW
Sub --> GW
GW --> IAM
GW --> BASIS
GW --> INFRA
client --> OR
OR --> GW
读图要点:
- 主应用(Shell) 负责 SSO、Token、qiankun 装载与 Tab 等控制台体验;子应用 专注业务 UI,与基座通过约定集成。
- 网关 是南北向流量的统一入口:动态路由、JWT/DPoP 校验、签名验证、链路追踪与响应整形等与
g2rain-iam、g2rain-basis协同。 - IAM 管「谁、拿什么令牌」;basis 管「资源与权限长什么样、如何下发给前端」;infra 管跨业务的「路由元数据、字典、国际化、发号」等横切能力。
# 3. 安全与信任链
端到端信任链建议理解为一条固定顺序:
- 身份:用户经 OAuth2(如授权码模式)在
g2rain-iam完成认证,获得 JWT(及刷新策略视配置而定)。 - 传输与边缘:请求进入 网关,校验 JWT,并按策略校验 DPoP(Proof-of-Possession)、JTI 防重放 等。
- 下游:网关将身份上下文转发至业务服务;业务侧按统一模型做细粒度授权(与资源/API 定义对齐)。
- 前端:子应用通过 Boot 拉取 资源与权限,动态注册路由与
v-permission等能力;HTTP 客户端侧携带 Token,并与 DPoP/签名策略一致。
# 4. 资源驱动:前后端如何对齐
「资源驱动」是 G2rain 权限模型的中枢:
- 后端(
g2rain-basis)维护页面、页面元素、菜单、API 端点等资源实体,并提供 authority 聚合查询。 - 前端 在启动阶段通过 Boot 加载资源,生成路由,并装配按钮级/API 级权限。
这样菜单、路由、接口权限来自 同一套配置数据,避免前后端各维护一份清单导致的长期漂移。
# 5. 工程化与模块地图
# 5.1 前端(g2rain-web)
| 模块 | 角色 |
|---|---|
| g2rain-main-shell | 控制台主应用:Vue3 + qiankun + SSO + Token + 签名链路 |
| g2rain-manager-app | 管理类子应用示例 |
| g2rain-app-template / g2rain-app-cli | 子应用模板与脚手架 |
前端内部分层(视图 / 运行时 / 平台 / 共享)见:架构设计总览。
# 5.2 后端(g2rain)
| 模块 | 角色 |
|---|---|
| g2rain-iam | IAM、OAuth2、JWT 密钥与令牌生命周期 |
| g2rain-basis | 资源、权限查询、登录/账号域接口 |
| g2rain-infra | 路由定义、字典、i18n、发号等 |
| g2rain-gateway-webmvc / webflux | 企业级 API 网关 |
# 5.3 工具链
| 模块 | 角色 |
|---|---|
| g2rain-spring-boot-starter、g2rain-common | 统一依赖与公共能力 |
| g2rain-generator-archetype、g2rain-generator-maven-plugin、g2rain-crafter | 工程生成与研发提效 |
代码生成与配置生成总述:代码生成与配置生成。
# 5.4 生态与业务扩展
- 生态扩展(如 MyBatis 等):见侧边栏 生态扩展。
- 业务域 WIP:见 业务扩展。
# 6. 阅读路径建议
| 读者目标 | 建议顺序 |
|---|---|
| 第一次了解全栈 | 本文 → 架构设计总览 → 主应用 g2rain-main-shell |
| 做权限与菜单 | 资源与权限模型 + g2rain-basis |
| 做登录与网关安全 | 认证与安全 + g2rain-iam + 网关文档 |
| 新建子应用/服务 | 快速开始 + 模板/脚手架 + 代码生成 |
# 7. 小结
G2rain 的架构设计可以压缩为三句话:
- IAM + 网关 解决「进得来、信得过、可治理」;
- basis 资源模型 解决「权限与 UI/API 同源、可运营」;
- 微前端 + 生成式工具链 解决「子应用快接入、工程边界不腐化」。
更细的论证与图示请以 CSDN 两篇原文为准;本站文档随仓库演进持续更新,二者不一致时以 仓库与当前文档 为实施依据。
架构设计总览 →