ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SpringBoot+Shiro构建企业级权限管理系统实战

SpringBoot+Shiro构建企业级权限管理系统实战 1. 项目概述这个基于SpringBoot的权限管理系统是一个开箱即用的企业级后台管理框架采用当前主流的SpringBootMyBatisShiro技术栈构建。我在实际项目中多次使用类似系统进行二次开发发现这类框架特别适合快速搭建需要权限控制的后台管理系统。系统核心功能包括用户管理、角色权限分配、菜单配置、部门管理等基础模块同时集成了代码生成器、定时任务、系统监控等实用工具。相比从零开发使用这种成熟框架能节省至少70%的开发时间特别适合中小型项目的快速迭代。2. 技术架构解析2.1 核心组件选型SpringBoot作为基础框架提供了自动配置和快速启动能力。我在实际使用中发现2.7.x版本最稳定启动时间通常在3-5秒左右。框架默认集成了MyBatis配置了通用Mapper和PageHelper分页插件Shiro处理认证授权默认采用MD5加盐加密Druid阿里开源的数据库连接池自带监控界面重要提示新项目建议直接使用SpringBoot3.xJDK17组合但要注意部分老版本依赖的兼容性问题。2.2 权限模型设计系统采用经典的RBAC基于角色的访问控制模型具体实现包含五个核心表sys_user用户表sys_role角色表sys_menu菜单/权限表sys_user_role用户角色关联sys_role_menu角色权限关联实际开发中我通常会添加sys_dept部门表来实现数据权限控制通过部门的树形结构实现不同层级的数据隔离。3. 快速部署指南3.1 环境准备基础环境要求JDK 1.8推荐JDK17MySQL 5.7Maven 3.6数据库初始化步骤CREATE DATABASE ry DEFAULT CHARACTER SET utf8mb4; USE ry; SOURCE /path/to/sql/ry_20230808.sql3.2 项目配置调整关键配置文件application.yml- 修改数据库连接信息application-druid.yml- 调整连接池参数logback.xml- 配置日志输出实测建议生产环境需要调整Druid的初始连接数initialSize和最大连接数maxActive根据服务器配置通常设置为20-50较合适。4. 核心功能实现4.1 权限控制实现Shiro的配置类ShiroConfig中主要包含Bean public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); // 配置拦截规则 MapString, String filterMap new LinkedHashMap(); filterMap.put(/logout, logout); filterMap.put(/login, anon); filterMap.put(/**, authc); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; }实际开发中经常需要自定义Realm来实现复杂的权限校验逻辑比如public class UserRealm extends AuthorizingRealm { Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 获取用户权限逻辑 } }4.2 前后端交互规范系统采用RESTful风格接口设计返回统一JSON格式{ code: 200, msg: 操作成功, data: {...} }在Controller层通过注解实现权限控制RequiresPermissions(system:user:view) GetMapping(/list) public TableDataInfo list(SysUser user) { // 业务逻辑 }5. 二次开发实战5.1 代码生成器使用配置数据源ruoyi-generator模块的application.yml设计表结构确保包含基础字段create_time, update_time等运行生成器访问/tool/gen页面生成效果实体类含Swagger注解Mapper接口及XMLService层代码Controller层代码Vue前端页面5.2 自定义功能开发以添加通知公告功能为例创建数据库表sys_notice使用代码生成器生成基础CRUD在sys_menu表添加菜单项配置角色权限关系开发技巧可以利用系统自带的DataScope注解实现数据权限过滤DataScope(deptAlias d, userAlias u) public ListSysUser selectUserList(SysUser user) { // 查询逻辑 }6. 生产环境优化6.1 性能调优建议启用Redis缓存spring: redis: host: 127.0.0.1 port: 6379 password: database: 0调整Tomcat参数server: tomcat: max-threads: 200 min-spare-threads: 10开启Gzip压缩server: compression: enabled: true mime-types: application/json,application/xml,text/html,text/xml,text/plain6.2 安全加固措施修改默认密钥application.yml中的shiro配置项开启XSS过滤XssFilter配置定期更新依赖检查pom.xml中的依赖版本7. 常见问题排查7.1 启动类问题问题1启动时报Failed to configure a DataSource解决方案检查数据库连接配置确认数据库服务已启动检查SQL脚本是否执行成功问题2Shiro重复加载解决方案SpringBootApplication(exclude { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class })7.2 权限失效问题典型场景新添加的菜单不显示按钮权限不生效排查步骤检查sys_menu表中的perms字段确认角色菜单关联关系清理浏览器缓存和Cookie8. 扩展开发建议集成工作流引擎可接入Activiti或Flowable添加多租户支持通过TenantId实现SaaS化升级前端框架Vue3Element Plus组合实现API网关结合Spring Cloud Gateway实际项目中我通常会先 fork 原项目仓库然后基于业务需求逐步添加这些扩展功能。对于中小型项目建议先专注于核心业务开发后续再逐步引入这些高级特性。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进