前言
权限管理几乎是每个后台系统都绕不开的模块。网上关于 RBAC 的文章一抓一大把,但大多数要么只讲概念,要么只贴代码片段,真到了落地的时候,还是得自己从头折腾一遍。
本文分享一套可运行的微服务权限管理方案。后端基于 Spring Cloud 2025 + OAuth2 + Nacos,前端用 React 19 + Vite 5 + Ant Design 6,前后端完全分离,开箱即用。如果正打算搞一套权限系统,或者想看看微服务架构下的权限怎么处理,可以花几分钟看看这个项目。
项目介绍
一套基于微服务架构的 RBAC 权限管理系统。整个项目按业务边界拆分成多个独立服务:网关层统一路由和鉴权,认证服务负责发放 Token,管理服务处理具体的业务操作,前后端通过 JSON 交互,松耦合、易扩展。
项目结构上,后端按领域划分为 admin(后台管理)、auth(认证授权)、gateway(网关)和 base(公共基础)四个大模块,前端单独维护。模块之间依赖清晰,不搞复杂的循环引用。数据库方面准备了完整的建表脚本和初始化数据,拉下来配置好 Nacos 和数据库就能跑起来。
项目功能
功能模块 | 说明 |
用户管理 | 账号的增删改查、启用/禁用、密码重置 |
组织机构 | 树形结构管理,支持多级组织关系 |
角色管理 | 角色的增删改查,给角色分配菜单权限 |
菜单管理 | 动态菜单树配置,支持目录、菜单、按钮三种类型 |
权限控制 | 基于 RBAC 模型的按钮级权限控制 |
数据字典 | 系统字典数据的统一维护 |
登录认证 | 验证码登录,JWT Token 签发与续期 |
网关鉴权 | 网关层统一校验 Token,下游服务透传用户信息 |
前端布局 | 四种布局模式可切换(经典、纵向、横向、分栏) |
暗黑模式 | 支持一键切换亮色/暗色主题 |
国际化 | 内置中文/英文两套语言包,可扩展 |
项目特点
开箱即用:完整的前后端代码、数据库脚本、Nacos 配置,拉下来就能本地运行
服务边界清晰:认证、管理、网关各司其职,改动一个服务不影响其他服务
注解式鉴权:提供了 @EnableAuthFilter 注解,想给哪个服务加鉴权,加个注解就行
配置统一管理:所有服务配置托管在 Nacos,支持动态刷新,不用改代码就能调整参数
环境变量覆盖:数据库、Redis、Nacos 等关键配置支持环境变量覆盖,方便容器化部署
前后端完全分离:前端独立部署,通过 API 与后端交互,不依赖任何模板引擎
项目技术
后端技术栈
分类 | 技术 | 版本 |
核心框架 | Spring Boot | 3.5.15 |
微服务 | Spring Cloud | 2025.0.2 |
注册配置中心 | Nacos | 3.2.2 |
认证授权 | OAuth2 + JWT | 4.5.0 |
ORM 框架 | MyBatis-Plus | 3.5.12 |
数据库连接池 | Druid | 1.2.28 |
数据库 | MySQL | 8.0+ |
缓存 | Redis | 6.0+ |
API 文档 | Knife4j | 4.4.0 |
配置加密 | Jasypt | 3.0.4 |
构建工具 | Maven | 3.9+ |
运行环境 | OpenJDK | 21 |
前端技术栈
分类 | 技术 | 版本 |
框架 | React | 19.x |
构建工具 | Vite | 5.x |
语言 | TypeScript | 5.x |
UI 组件库 | Ant Design | 6.x |
状态管理 | Redux Toolkit | 2.x |
路由 | React Router DOM | 6.x |
图表 | ECharts | 6.x |
国际化 | i18next | 26.x |
HTTP 请求 | Axios | 1.x |
包管理器 | pnpm | 最新版 |
项目代码
项目整体采用多模块 Maven 结构,根目录下按服务划分:
cs-springcloud-admin├── cs-admin # 后台管理服务│ ├── cs-admin-api # API 模块:DTO、VO、Model│ └── cs-admin-server # 服务端:Controller、Service、Mapper├── cs-auth # 认证授权服务│ ├── cs-auth-client # 客户端 SDK:注解、过滤器│ └── cs-auth-server # 认证服务端├── cs-base # 基础公共模块│ ├── cs-base-common # 工具包:常量、异常、工具类│ └── cs-base-core # 核心基类:BaseController、配置类├── cs-gateway # 网关服务(Spring Cloud Gateway)├── cs-admin-ui # 前端项目(React 19 + Vite 5)└── doc # 文档与脚本 └── db # SQL 脚本(建表 + 初始化数据)核心代码片段
认证服务签发 Token 的核心逻辑:
@PostMapping("/login")public Result<loginvo> login(@RequestBody LoginDTO dto) { // 校验验证码 if (!authService.checkCaptcha(dto.getCaptchaKey(), dto.getCaptchaCode())) { thrownew BusinessException("验证码错误"); } // 校验用户名密码 User user = authService.authenticate(dto.getUsername(), dto.getPassword()); // 生成 JWT Token String token = JWT.create() .withSubject(user.getId().toString()) .withClaim("username", user.getUsername()) .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION)) .sign(Algorithm.HMAC256(SECRET)); return Result.success(new LoginVO(token, user));}网关层统一鉴权的过滤器:
@Componentpublicclass AuthFilter implements GlobalFilter { @Override public Mono<void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String token = getTokenFromRequest(exchange.getRequest()); if (StringUtils.isBlank(token)) { return unauthorized(exchange); } // 解析 Token 并校验有效性 Claims claims = parseToken(token); if (claims == null) { return unauthorized(exchange); } // 将用户信息透传到下游服务 exchange = mutateRequest(exchange, claims); return chain.filter(exchange); }}前端请求拦截器的封装:
// axios 拦截器service.interceptors.request.use((config) => {const token = store.getState().auth.token;if (token) { config.headers.Authorization = `Bearer ${token}`; }return config;});service.interceptors.response.use((response) => response.data,(error) => { if (error.response?.status === 401) { // Token 失效,跳转登录页 store.dispatch(logout()); navigate('/login'); } returnPromise.reject(error); });项目效果
登录页走的是验证码 + 用户名密码的流程,验证通过后后端返回 JWT Token,前端存到 Redux 和 localStorage 里。后续所有请求都在 Header 里带上 Token,网关会统一校验。
进入主界面后,左侧菜单完全由后端动态返回,不同角色看到的内容不一样。管理员能看到全部菜单,普通角色只看到自己有权限的部分。页面级权限控制到菜单项,按钮级权限控制到增删改查这类操作按钮。
前端支持四种布局模式:经典、纵向、横向、分栏,根据自己的使用习惯切换就行。暗黑模式也是一键切换,不用刷新页面。国际化目前有中英文,在右上角下拉框直接切换,所有静态文本跟着变。
API 文档集成了 Knife4j,启动后端服务后直接访问 /doc.html 就能看到所有接口的定义、参数、返回值,前端联调或者测试都很方便。
项目源码
项目已完整开源,所有代码托管在 Gitee 和 GitHub:
Gitee:https://gitee.com/cs_springcloud/cs-springcloud-admin
GitHub:https://github.com/cs_springcloud/cs-springcloud-admin
感兴趣的话可以直接 clone 下来跑一跑。
总结
一套趁手的权限管理脚手架,能让后续的业务开发省不少事。这套项目从服务拆分、技术选型到代码实现,走的都是比较主流的方案,没有整什么花活。用到了 Spring Cloud 2025、OAuth2、Nacos、MyBatis-Plus、React 19、Vite 5、Ant Design 6 这些技术,结构清晰,扩展性也还不错。
当然,项目还有很多可以完善的地方,比如更细粒度的数据权限、操作日志审计、分布式事务等。后续会根据实际需要逐步迭代。
关键词
RBAC权限管理、Spring Cloud微服务、OAuth2认证授权、Nacos配置中心、JWT令牌、React后台管理、Ant Design组件库、前后端分离、MyBatis-Plus、Spring Boot 3.5、Vite构建工具、TypeScript、网关统一鉴权、动态菜单、按钮级权限控制、暗黑模式、国际化、Knife4j接口文档、Jasypt配置加密、代码开源 作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
方便大家交流、资源共享和共同成长
纯技术交流群、需要的小伙伴请扫码
有收获?不妨分享让更多人受益
关注「程序员开源栈」,共同提升技术实力
</void></loginvo>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!