什么是 ContiNew Admin
ContiNew Admin 是什么、为什么而生(维护者自述的项目起源)、核心特性与前后端技术栈基线。
是什么
AI 编程纪元已经开启,基于 ContiNew 项目开发,让 AI 助手“学习”更优雅的代码规范,“写出”更优质的代码。
ContiNew Admin(Continue New Admin),页面现代美观,且专注设计与代码细节的 高质量多租户中后台 管理系统框架。开箱即用,持续迭代优化,持续提供舒适的开发体验。
我们始终坚信好的产品必然是反复打磨出来的,而在工作中我们受限于客户需求、开发周期等因素,无法深度打磨、重构我们的代码,这也是架构腐烂的根源。所以,我们希望能在业余时间,通过开源社区的力量来打磨出一个好的产品,一个好的实践,一个好的生态。
我们的愿景在于,当你将 ContiNew 系列项目应用到工作场景时,不仅仅是得到效率的提高,更可以得到舒适的开发体验,让更多开发者的编程工作多一点“甜”。
工程形态上,后端为 Maven 多模块工程(依赖自上而下为 continew-server → continew-system → continew-common),基于 Spring Boot 3(Java 17),启动类为 top.continew.admin.ContiNewAdminApplication,dev 环境端口 8000;前端为独立仓库 continew-admin-ui,基于 Vue 3、Arco Design、TypeScript 与 Vite。框架的通用基础能力(CRUD 套件、认证、租户、数据权限、缓存、日志等)抽离在 ContiNew Starter 中,以 BOM 方式引入(2.17.0),Admin 在其上做业务实现与工程级扩展。
项目起源
我热衷于做数据归档,归档后的数据可以提高学习/工作效率,为记忆“减负”,在持续的数据归档中,优质的“沉淀”会带来非匀速、跨越式的学习/工作体验。数据归档是一件需要持续去做的事情。
从接触程序代码的第一天,我的程序数据归档也随之开始了,刷过的算法题、笔记、对接各种组件的配置文件,甚至于一些亮眼的样式设计、“如诗”的代码片段。这些数据的沉淀丰富了我的解决方案,提高了我的编程效率,逐渐为各种场景落实成了一个个雏形程序。再后来,我意识到,我归档的这些雏形程序,有一个更为妥贴的名称:程序框架/脚手架。
技术的发展,导致这些雏形程序的生命周期很是短暂,它们有别于我归档的其他数据,有时由于工作的原因,没有时间很好的去沉淀它们,在使用时变得越来越不顺手。所以,某段时间,我放弃了维护,而是去采用一些更为成熟的框架。
不过,在陆续几年使用了一些成熟框架后,我前后遇到了一些困难:
- 代码洁癖想要找到一个扩展性佳,代码规范良好,开发体验舒适的框架很不容易,总是差些什么
- 项目上手困难或是基础版功能不全,需要的全在专业版,亦或者代码阅读性差,文档收费
- 部分解决方案缺失,已有解决方案也过于偏向样板化,无法形成良好的逻辑闭环
- 好不容易找到一些相较合适的,没过多久,部分作者可能暂时没法对外发“电”了,随着了解深入,很多 Bug 或新技术趋势还是需要自己研究解决
在工作中,很多想法/设计受限于客户需求、开发工期,必须优先以交付为导向,但一些优秀的实践需要花时间持续进行沉淀,只要我没跳出这个圈子,我还是需要一直去做好程序归档。“种一棵树最好的时间是十年前,其次是现在”,最终,我选择在业余时间更加正视这件事,从头归档沉淀,从添加每一个依赖开始,我希望它能持续的迭代优化、演进,所以我把它命名为 ContiNew(Continue New)。并且这次我选择了开源,我希望它不仅仅能吸收我的需求和沉淀,而是依托开源协作模式,及时发现更多的问题,接受更多的可能性,沉淀更优秀的思考,设计。
解决什么问题
中后台项目的重复工作集中在权限模型、认证会话、文件存储、日志审计、任务调度这些横切能力上。ContiNew Admin 给出一套已经组合好且经过生产验证的默认实现,让新项目的起点是业务代码,而不是脚手架代码。
已经内置并开箱可用的功能包括用户、角色、菜单、部门、字典、参数配置、通知公告、文件管理(回收站与分片上传)、存储配置、短信配置、客户端配置、在线用户、登录与操作日志、多租户与租户套餐、AK/SK 能力开放、任务调度、代码生成。功能清单与使用方式见功能手册。
核心特性
多租户行级隔离:基于 ContiNew Starter 的 continew-starter-extension-tenant-mp(MyBatis-Plus 行级隔离),租户 ID 经 X-Tenant-Id 请求头传递,默认租户 ID 为 0。租户管理、套餐管理由 continew-plugin-tenant 插件提供。
认证与多方式登录:基于 Sa-Token(1.45.0)+ JWT,Token 名 Authorization。内置账号密码、邮箱验证码、手机验证码、JustAuth 第三方登录四种处理器。自 4.2.0 起引入 continew-starter-auth-refresh-token,采用 Access Token(内存持有)+ Refresh Token(HttpOnly Cookie)双令牌轮换。Token 有效期在「客户端配置」页面按端动态管理。
数据权限:基于 continew-starter-extension-datapermission-mp,Mapper 继承 DataPermissionMapper(continew-common 的 base/mapper 包),由 DefaultDataPermissionUserDataProvider 提供当前用户数据范围,角色与部门的数据权限关联存于 sys_role_dept 表。
CRUD 套件:Controller 标注 @CrudRequestMapping 并继承 BaseController,BaseController.preHandle 按 API 类型自动生成并校验权限码。例如 POST /system/user 自动要求 system:user:create 权限,无需手写鉴权注解。该套件由 ContiNew Starter 提供,完整说明见 CRUD 套件文档。
可插拔插件:能力开放(AK/SK 签名)、多租户、任务调度(Snail Job)、代码生成器四个功能以 continew-plugin 下的独立模块交付,可按需引入或裁剪。任务调度默认关闭(snail-job.enabled: false),生产配置默认开启。
代码生成器:连接数据库表生成后端 Controller/Service/Mapper/Entity 等 11 个模板与前端列表页、新增弹窗、详情抽屉等 4 个模板,产物与现有分层约定一致,生成后即可参与 CRUD 权限体系。
技术栈基线
后端(第三方依赖版本统一由父 POM ContiNew Starter 的依赖管理供给,根 pom.xml 的 parent 指向 top.continew.starter:continew-starter):
| 依赖 | 版本 |
|---|---|
| Spring Boot | 3.5.16 |
| JDK | 17 |
| ContiNew Starter(BOM) | 2.17.0 |
| Sa-Token | 1.45.0 |
| MyBatis Plus | 3.5.17 |
| Liquibase | 4.31.1 |
| JetCache | 2.7.9 |
| Redisson | 3.52.0 |
| CosID | 2.13.3 |
| FastExcel | 1.3.0 |
| Snail Job | 1.10.0 |
| X File Storage | 2.3.0 |
| SMS4J | 3.3.5 |
| JustAuth | 1.16.7 |
| Crane4j | 2.10.0 |
| Hutool | 5.8.47 |
前端(版本取自 continew-admin-ui 的 package.json):
| 依赖 | 版本 |
|---|---|
| Vue | 3.5.4 |
| Arco Design(@arco-design/web-vue) | 2.57.0 |
| TypeScript | 5.0.4 |
| Vite | 5.1.5 |
| vue-router | 4.3.3 |
| Pinia | 2.0.16 |
| pnpm | 9.3.0 |
运行环境要求(JDK 17 为 Spring Boot 3 的最低要求):JDK 17、MySQL 8.0.42(亦支持 PostgreSQL,脚本位于 db/changelog/postgresql)、Redis 7.2.8、Maven 3.9+(仓库内置 mvnw)。
下一步
为什么选 ContiNew Admin
十条选型理由:长期迭代、Starter 组件、CRUD 套件、代码规范与质量保障。
快速开始
搭建开发环境,完成前后端首次启动。
在线演示
账号 admin / admin123,直接体验全部内置功能。