简介
- 若依是一个基于SpringBoot,Shiro,Mybatis的权限后台管理系统
- 官网文档:介绍 | RuoYi
- 源码
-
- 前后端不分离 RuoYi: 🎉 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用
- 前后端分离 RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
- 微服务 RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本
使用步骤
- 首先从git上拉取代码
git clone https://gitee.com/y_project/RuoYi-Vue
- 用idea打开项目,配置数据库
- 配置redis
# redis 配置
redis:
# 地址
host: localhost
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password: root
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
- 运行前端,在ruoyi-ui目录下执行两行命令
# 安装依赖
npm install# 启动服务
npm run dev
- 如果报这个错误
error:03000086:digital envelope routines::initialization error
执行这个命令
set NODE_OPTIONS=--openssl-legacy-provider
参考文档
https://blog.csdn.net/qq_21271511/article/details/127996193
- 运行起来以后,前端页面会自动打开
- 登录系统
#用户名
admin#密码
admin123
代码生成器
- 首先创建表结构
- 导入表结构
- 点击生成按钮,生成前后端代码和sql文件
- 将sql文件导入到menu菜单表中,根据场景修改其parent_id,同时将前后端代码分别根据路径CV到项目中
- 当后端项目返回的数据都是数据,而页面显示需要中文,这个时候就需要使用formater来转换
- 重启项目
权限控制
- 若依的权限控制是标准的基于角色的RBAC(Role Based Access Controll)权限控制
- 使用的时候在controller的接口上添加以下注解即可
-
- @RequiresRoles("admin")
- @RequiresPermissions
- 常用的权限管理框架
-
- Shiro(前后端不分离版本):更简单
- SpringSecurity(前后端分离vue版本):稍微复杂一些
- 若依的权限校验
-
- 前后端不分离版本的shiro:
-
-
- 用户登录的时候,首先是到shiro的过滤器com.ruoyi.framework.shiro.web.filter.captcha.CaptchaValidateFilter去验证验证码
- 然后shiro框架会回调com.ruoyi.framework.shiro.realm.UserRealm里面的doGetAuthenticationInfo()方法做登录,登录的时候校验用户名密码做登录
- 然后shiro框架会回调com.ruoyi.framework.shiro.realm.UserRealm里面的doGetAuthorizationInfo()方法去获取用户的角色和权限
- shiro会做aop,检验权限信息
-
-
- 前后端分离vue版本
-
-
- SpringSecurity的主配置文件:com.ruoyi.framework.config.SecurityConfig
- 获取用户的权限信息:com.ruoyi.framework.web.service.UserDetailsServiceImpl#loadUserByUsername()
- 登录接口:com.ruoyi.web.controller.system.SysLoginController#login()
-
- 查询权限的底层sql
操作日志
- 记录用户的操作日志
-
- 在业务方法上添加注解@com.ruoyi.common.annotation.Log
-
-
- 背后是AOP com.ruoyi.framework.aspectj.LogAspect
-
-
- @Before : 记录业务的开始时间
- @AfterReturn、@AfterThrowing:记录详细的操作日志
- 异步写到数据库
多数据
- 首先把系统中所有的数据源都加载起来com.ruoyi.framework.config.DruidConfig,存放到一个动态数据源com.ruoyi.framework.datasource.DynamicDataSource中
- AOP拦截业务方法上的@DataSource参数,拿到执行业务方法要使用的数据源的名称,设置到ThreadLocal中。
- spring框架会回调实现了AbstractRoutingDataSource抽象类的determineCurrentLookupKey()方法来决定访问方法的时候使用哪一个数据源,只需要在这个回调方法中返回@DataSource注解中的数据源的名称即可。