# Skins 业务后端 基于 **若依(RuoYi)4.8.2** 扩展的多模块 Java 后端,集成 CSGO/饰品相关业务(用户、玩法、第三方支付与回调、定时任务、推广后台等)。仓库同时包含两套管理端前端工程。 克隆后请在项目根目录执行 `mvn -v` 确认 JDK 21 与 Maven 可用,再按下文完成数据库与中间件初始化。 --- ## 技术栈概览 | 层级 | 技术 | |------|------| | 运行时 | Java **21** | | 框架 | Spring Boot **4.0.3**(启用虚拟线程 `spring.threads.virtual.enabled`) | | Web 与安全 | **Spring Security 6**(无状态会话)、JWT(`Authorization` 请求头)、若依式菜单/权限模型 | | 持久层 | MyBatis / MyBatis-Plus、PageHelper、Druid(含多数据源扩展) | | 数据库 | MySQL | | 缓存 | Redis(Spring Data Redis + Lettuce) | | 消息 | RabbitMQ(业务侧配置虚拟主机等,详见各 profile) | | 实时 | WebSocket(如 `/ws/**` 等路径,与安全放行配置保持一致) | | API 文档 | 已移除(不再依赖 Springfox / springdoc,仓库内无 Swagger UI 与 OpenAPI 端点) | --- ## 仓库结构 ``` chengdu-backend/ ├── ruoyi-admin/ # Web 入口(Spring Boot 启动模块) ├── ruoyi-framework/ # 安全、过滤器、资源配置等封装 ├── ruoyi-system/ # 系统管理(用户、角色、菜单等) ├── ruoyi-common/ # 通用工具、常量、MQ 配置等 ├── ruoyi-quartz/ # 定时任务(若依 Quartz 集成) ├── ruoyi-generator/ # 代码生成 ├── skins-model/ # 业务领域模型(实体等) ├── skins-service/ # 业务服务聚合 POM(子模块见下) │ ├── service-admin/ # 运营管理侧接口 │ ├── service-user/ # 用户侧接口 │ ├── service-playingmethod/ # 玩法相关 │ ├── service-thirdparty/ # 第三方对接 │ └── service-task/ # 任务与调度配合 ├── skins-promo/ # 推广后台 API(路径前缀多为 /promo) ├── ruoyi-ui/ # 管理端 Vue2 + Element UI(若依经典前端) ├── promo-ui2/ # 推广/运营后台 Vue3 + Element Plus + Vite └── docker/ # MySQL / Redis / RabbitMQ 编排 ``` ### 启动类 后端入口:`ruoyi-admin` 模块中的 `com.ruoyi.RuoYiApplication`。使用 `@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })` 排除 Spring Boot 默认数据源自动配置(Spring Boot 4 下为 `org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration`),由若依多数据源与 Druid 配置接管。 --- ## 运行环境与配置 ### 必备依赖 - JDK **21** - Maven **3.6+** - MySQL **8.x**(库名与账号见各 profile;本地可参考 `docker/docker-compose.yml`) - Redis - RabbitMQ(若启用了 MQ 监听或相关消费者则需可用) 根 `pom.xml` 已配置 **阿里云 Maven 公共仓库**,便于国内环境拉取依赖。 ### Spring Profile `ruoyi-admin/src/main/resources/application.yml` 中通过 `spring.profiles.active` 切换环境,配套文件: - `application-dev.yml` — 本地/开发 - `application-test.yml` — 测试 - `application-pro.yml` — 生产 **重要:** 上述 profile 文件中常含数据库口令、第三方支付与短信密钥等敏感信息。**勿将真实密钥提交到公开仓库**;上线请改用环境变量、密钥管理系统或独立于仓库的配置挂载。 ### 默认服务端口与上下文 - HTTP 端口:**28081**(见根配置 `ruoyi-admin/src/main/resources/application.yml` 中的 `server.port`;各环境可被 profile 或部署参数覆盖,默认绑定 `0.0.0.0`) - 上下文路径:`/`(与管理端、`VUE_APP_BASE_API` 及反向代理前缀需一致) ### 对外匿名接口(简述) 与安全配置对齐的常见分类包括:`/login`、`/register`、`/captchaImage`,以及业务侧的 `/api/**`、`/admin/**`、WebSocket、Druid 监控路径等。具体请以 `ruoyi-framework` 中 **SecurityFilterChain** 与白名单配置为准。 --- ## 本地启动后端 **方式一:先打包再在启动模块运行** 在项目根目录执行: ```bash mvn clean package -DskipTests cd ruoyi-admin mvn spring-boot:run ``` **方式二:根目录一键拉起(会解析 `ruoyi-admin` 所需模块依赖)** ```bash mvn -pl ruoyi-admin -am spring-boot:run -DskipTests ``` 也可在 IDE 中直接运行 `RuoYiApplication`。 首次运行前请: 1. 创建 MySQL 库并完成若依及业务所需的 SQL 初始化(以团队提供的脚本为准)。 2. 按所选 profile 修改数据源、Redis、RabbitMQ 等连接信息。 --- ## Docker 基础设施 目录:`docker/` - `docker-compose.yml`:MySQL(含自定义镜像)、Redis、RabbitMQ(管理端口及初始化示例)。 - `docker/docker-cn/`:面向大陆镜像拉取环境的编排变体。 常用操作见 **`docker/readme.md`**(如单独重建某个服务等)。 --- ## 前端工程 ### ruoyi-ui(Vue 2) - 技术栈:Vue CLI、Element UI(`package.json` 声明 Node `>=8.9`,实际开发建议 Node **16 LTS** 或 **18 LTS**,并按需开启 OpenSSL 兼容)。 - 脚本见 `ruoyi-ui/package.json`(Windows 脚本含 `set NODE_OPTIONS=--openssl-legacy-provider`;在 macOS/Linux 上需 `export NODE_OPTIONS=...` 或使用等价脚本)。 - 开发与打包:`npm run dev`、`npm run build:prod` 等。 - 原「系统工具 → 系统接口」的 Swagger 页已随接口文档一并删除(`views/tool/swagger/index.vue`),若侧边栏仍有该菜单,执行 `DELETE FROM sys_menu WHERE component = 'tool/swagger/index';` 后重新登录。 ### promo-ui2(Vue 3) - 技术栈:Vue 3、Vite、TypeScript、Element Plus(基于 vue-element-plus-admin 演进);要求 **Node ≥ 18**、`pnpm ≥ 8.1`(以 `promo-ui2/package.json` 中 `engines` 为准)。 - 推荐使用 **pnpm**:`pnpm install`、`pnpm dev`、`pnpm build:pro` 等。 - 详细说明见 `promo-ui2/README.zh-CN.md`。 前端请求的接口基地址需指向本后端;若经 Nginx 网关,注意与团队约定的前缀(如 `/prod-api`)一致。 --- ## 业务模块说明(简述) | 模块 | 职责 | |------|------| | **skins-model** | 共享实体与领域常量 | | **service-user** | 用户相关业务 | | **service-admin** | 运营管理侧业务 | | **service-playingmethod** | 玩法相关逻辑 | | **service-thirdparty** | 第三方对接(支付、交易平台回调等,密钥在各 profile 中) | | **service-task** | 异步任务 / 与 Quartz 等协同 | | **skins-promo** | 推广后台:登录注册、流水与佣金、充值卡等(REST 前缀示例:`/promo`) | --- ## API 文档 - 项目已**移除全部接口文档能力**:删除 Springfox(`springfox-boot-starter`)、springdoc-openapi 依赖、`SwaggerConfig` 与源码中的 `@Api` / `@ApiOperation` / `@ApiModelProperty` 等注解,`SecurityConfig` 与 `ResourcesConfig` 里对应的放行与静态映射也已去掉。 - 因此 `/swagger-ui.html`、`/v3/api-docs`、`/*/api-docs`、`/doc.html` 均不再对外提供服务(未认证访问会直接落到 401)。 --- ## 版本信息 - 父 POM:`com.ruoyi:ruoyi:4.8.2`(`spring-boot.version` **4.0.3**) - 若依官网参考: --- ## 安全建议 1. 轮换并私有化所有第三方(支付宝、聚合支付、短信等)密钥;生产环境勿使用仓库内示例明文。 2. 修改 JWT `token.secret` 等非默认值。 3. Druid 监控台:生产已关闭(`application-pro.yml` 的 `statViewServlet.enabled=false`,`/druid/**` 是匿名放行的,开着等于把全部 SQL 与连接信息暴露到公网); 开发环境已限制 `allow: 127.0.0.1` 并改用非默认口令。临时排障如需开启,务必保持白名单 + 改口令,用完立即关回。 4. **三端 token 互不通用**(游戏管理后台 / 推广后台 / 玩家端):三个端共用同一套 JWT 与会话存储, 靠 `LoginUser.loginScope`(`admin` / `promo` / `player`)区分,判定在 `ruoyi-framework` 的 `SecurityConfig`: `/admin|/system|/monitor|/tool|/test` 只认后台账号、`/promo/**` 只认推广端签发的 token、`/api/**` 只认玩家端签发的 token。 标记由 `ApiUserDetailsServiceImpl` 按登录账号前缀(`api_` / `promo_` / `promo_user_` / 无前缀)写入,随会话缓存在 Redis。 **注意**:升级到该版本后,不带端标记的旧 token 会被拒绝,推广后台与玩家端需要重新登录一次(后台账号不受影响)。 如有与本说明不一致之处,以当前仓库代码及团队部署文档为准。