自荐一个单体中后台系统

2 阅读3分钟

Eagle

基于 Spring Boot 4.0 + Java 25 的企业级应用脚手架,采用领域驱动设计(DDD)+ Spring Modulith 模块化架构。项目地址:gitee.com/sunjones/ea…

特性

  • DDD 分层架构 — 充血模型、聚合根、领域事件、六边形端口与适配器
  • Spring Modulith — 编译期模块边界校验,天然为微服务拆分做准备
  • OAuth2 认证中心 — 基于 Spring Authorization Server,支持授权码(PKCE)、短信验证码、微信小程序/扫码登录
  • RBAC 权限控制 — 角色 + @PreAuthorize 细粒度接口鉴权
  • 多级缓存 — Redis + Caffeine
  • 审计日志 — 自动记录操作日志,支持定期清理
  • 国际化 — 错误消息支持中/英文,Accept-Language 自动切换
  • GraalVM Native Image — 支持编译为原生可执行文件

技术栈

类别技术
框架Spring Boot 4.0.3、Spring Security、OAuth2 Authorization Server
语言Java 25(GraalVM Toolchain)
构建Gradle 9.4.1
数据库MySQL(生产)/ H2(开发)
ORMSpring Data JPA + Hibernate 7
缓存Redis + Caffeine
模块治理Spring Modulith 2.0.5
对象映射MapStruct 1.6.3
API 文档SpringDoc OpenAPI 3.0.2(Swagger UI)
实时通信WebSocket(STOMP)
第三方微信 SDK、阿里云 SMS

模块结构

com.eagle
├── auth/       # 认证授权域 — 账号、OAuth2、微信/短信登录
├── system/     # 系统管理域 — 用户、角色、部门、岗位、字典、日志
├── config/     # 全局配置 — Security、Cache、Async、i18n
└── common/     # 共享内核 — 异常体系、错误码、基类、跨域事件

模块依赖方向:

auth  ──────────────────────────────────▶ common
system ──▶ auth::port(六边形端口)──▶ common
config ──▶ auth::security           ──▶ common

auth 对任何业务模块零依赖,system 通过实现 auth 的出站端口(Driven Port)提供授权信息。

快速开始

环境要求

  • JDK 25+(推荐 GraalVM)
  • MySQL 8.0+(或使用内置 H2)
  • Redis(可选,用于缓存)

运行

# 克隆项目
git clone https://github.com/your-username/eagle.git
cd eagle

# 开发模式启动(H2 内存数据库)
./gradlew bootRun

# 访问
# Swagger UI: http://localhost/swagger-ui/index.html
# 登录页面:   http://localhost/login
# 默认管理员: admin / 123456

构建

./gradlew build                  # 编译 + 测试
./gradlew test                   # 运行测试
./gradlew nativeCompile          # GraalVM Native Image

API 概览

模块端点说明
账号/accounts注册、密码管理、锁定/解锁
短信/sms验证码发送
OAuth/oauth-clientsOAuth2 客户端管理
微信/login/wechat微信扫码/H5 登录
用户/users用户档案、角色/部门/岗位分配
角色/roles角色管理
部门/depts部门树管理
岗位/posts岗位管理
字典/dicts数据字典管理
日志/logs审计日志查询

所有接口均通过 @PreAuthorize 控制权限,详见 Swagger UI 文档。

认证方式

方式说明
用户名密码OAuth2 授权码 + PKCE
短信验证码自定义 grant_type: sms_code
微信小程序自定义 grant_type: wechat_mini_program
微信扫码Web OAuth2 回调 → Session 认证

架构设计

六边形架构(Ports & Adapters)

                    ┌─────────────────────┐
                    │     auth 域          │
                    │                     │
  Controller ──▶    │  Application        │
                    │       ↓             │
                    │  Domain             │
                    │    ├── Model        │
                    │    ├── Repository   │
                    │    └── Port ◄───────┼──── system 域实现(Adapter)
                    │       ↓             │
                    │  Infrastructure     │
                    └─────────────────────┘

跨域协作

  • 事件驱动:auth 发布 AccountRegisteredEvent → system 异步创建 User
  • 端口调用:auth 定义 AuthorizationPort → system 提供 AuthorizationAdapter 实现

模块边界治理

# PR 前必须通过
./gradlew test --tests "*.ModulithArchitectureTest"

Spring Modulith 在测试阶段静态扫描,检测循环依赖和非法跨模块访问。

配置

关键配置项(application.yml):

eagle:
  admin:
    username: admin
    password: ${EAGLE_ADMIN_PASSWORD:123456}
  log:
    cleanup:
      enabled: true
      retention-days: 90        # 审计日志保留天数
      cron: "0 0 2 * * ?"      # 每天凌晨 2 点清理
  oauth:
    default-client:
      client-id: eagleWeb
      require-proof-key: true   # PKCE
  wechat:
    mini-program:
      app-id: ${WECHAT_MINI_APP_ID:}
      app-secret: ${WECHAT_MINI_APP_SECRET:}
  sms:
    aliyun:
      access-key-id: ${ALIYUN_SMS_ACCESS_KEY_ID:}
      sign-name: ${ALIYUN_SMS_SIGN_NAME:}

License

Apache License 2.0