# 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-iamg2rain-basis 协同。
  • IAM 管「谁、拿什么令牌」;basis 管「资源与权限长什么样、如何下发给前端」;infra 管跨业务的「路由元数据、字典、国际化、发号」等横切能力。

# 3. 安全与信任链

端到端信任链建议理解为一条固定顺序:

  1. 身份:用户经 OAuth2(如授权码模式)在 g2rain-iam 完成认证,获得 JWT(及刷新策略视配置而定)。
  2. 传输与边缘:请求进入 网关,校验 JWT,并按策略校验 DPoP(Proof-of-Possession)、JTI 防重放 等。
  3. 下游:网关将身份上下文转发至业务服务;业务侧按统一模型做细粒度授权(与资源/API 定义对齐)。
  4. 前端:子应用通过 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-starterg2rain-common 统一依赖与公共能力
g2rain-generator-archetypeg2rain-generator-maven-pluging2rain-crafter 工程生成与研发提效

代码生成与配置生成总述:代码生成与配置生成

# 5.4 生态与业务扩展

  • 生态扩展(如 MyBatis 等):见侧边栏 生态扩展
  • 业务域 WIP:见 业务扩展

# 6. 阅读路径建议

读者目标 建议顺序
第一次了解全栈 本文 → 架构设计总览 → 主应用 g2rain-main-shell
做权限与菜单 资源与权限模型 + g2rain-basis
做登录与网关安全 认证与安全 + g2rain-iam + 网关文档
新建子应用/服务 快速开始 + 模板/脚手架 + 代码生成

# 7. 小结

G2rain 的架构设计可以压缩为三句话:

  1. IAM + 网关 解决「进得来、信得过、可治理」;
  2. basis 资源模型 解决「权限与 UI/API 同源、可运营」;
  3. 微前端 + 生成式工具链 解决「子应用快接入、工程边界不腐化」。

更细的论证与图示请以 CSDN 两篇原文为准;本站文档随仓库演进持续更新,二者不一致时以 仓库与当前文档 为实施依据。