ruoyi-cloud思维导图
2024-07-25 09:10:25 0 举报
AI智能生成
ruoyi-cloud思维导图分析帮助理解
作者其他创作
大纲/内容
基本架构
架构图
spring cloud alibaba 技术栈
nacos 2021.0.5.0(服务注册和发现、动态配置、健康检查)
@RefreshScope
https://nacos.io/docs/latest/concepts/
sentinel 2021.0.5.0(服务的熔断降级、限流)
https://blog.csdn.net/m0_64637029/article/details/137157312
gateway 3.1.8(服务转发、限流、熔断、路由、跨域配置、api聚合、鉴权)
openfeign 3.1.8(声明式调用,Ribbon/Loadbalancer实现了负载均衡)
seata 2021.0.5.0(分布式事务)
zipkin(收集、持久化日志数据+可视化界面)+sleuth (各服务生成全局跟踪ID+span)框架暂未体现
https://blog.csdn.net/qq_39826207/article/details/130398636
Spring Cloud Stream 消息驱动(mq)
nacos
配置参数详解 https://blog.csdn.net/qing_zhi_feng/article/details/136363273
系统模块结构
ruoyi-ui 前端框架
ruoyi-gateway 网关模块 (路由转发、限流、熔断、路由、跨域配置、api聚合、鉴权)
ruoyi-auth 认证中心 (用户信息认证、jwt令牌认证)
ruoyi-api 接口模块
ruoyi-api-system 系统接口 (接口模块openfeign)
ruoyi-common 通用模块
ruoyi-common-core 核心模块
公共常量、返回类型、请求类型、枚举、自定义异常基础类
excel导入导出自定义注解
常用的工具类(分页、文件处理、加密解密、字符串处理,事件处理,xss等等)
ruoyi-common-datascope 权限范围
数据隔离 @DataScope
ruoyi-common-datasource 多数据源
多数据源自定义注解
Master
Slave
ruoyi-common-log 日志记录
记录保存操作日志
@Log
ruoyi-common-redis 缓存服务
redis操作(RedisTemplate)
ruoyi-common-seata 分布式事务
ruoyi-common-security 安全模块
security认证
@InnerAuth(内部调用标识验证)
@RequiresLogin
@RequiresPermissions
@RequiresRoles
feign拦截器传递用户数据、令牌等
FeignRequestInterceptor
全局异常处理
mvc拦截器
时区配置
自定义拦截器(设置SecurityContextHolder中的用户信息)
令牌操作
ruoyi-common-sensitive 数据脱敏
@Sensitive
自定义Jackson序列化器+自定义注解对配置字段进行不同效果的脱敏
ruoyi-common-swagger 系统接口
接口文档
ruoyi-modules 业务模块
ruoyi-system 系统模块
管理后台业务接口
用户、部门、岗位、菜单、角
色、字典、参数、通知、日志等
色、字典、参数、通知、日志等
ruoyi-gen 代码生成
代码生成工具
velocity+变量代码占位
ruoyi-job 定时任务
quartz+Feign+nacos
ruoyi-file 文件服务
fastdfs
minio
ruoyi-visual
ruoyi-visual-monitor 监控中心
spring-boot-admin
spring-boot-starter-actuator
spring-boot-starter-security
sentinel
nacos中的
sentinel-ruoyi-gateway配置文件
sentinel-ruoyi-gateway配置文件
sentinel规则解析 https://blog.csdn.net/xiaochen_2715/article/details/125431139
功能权限
登录
1.前端提交用户名和密码调用auth/login接口
2.gateway网关通过AuthFilter过滤器对请求进行认证
3.gateway网关通过nacos配置的路由规则将请求转发到ruoyi-auth认证服务的auth/login接口
1.用户名和密码进行合法性校验
2.IP黑名单校验和记录数据
3.调用ruoyi-system模块/user/info/{username}接口获取用户信息、角色信息、权限信息
4.对账号密码进行业务校验、通过Spring Security对密码进行正确性校验、密码错误次数校验(redis)
5.调用ruoyi-system模块/logininfor接口记录登录信息
6.调用ruoyi-system模块/user/recordlogin接口更新用户登录IP地址和登录时间
7.通过ACCESS_TOKEN + uuid生成redis key将包含用户信息、角色信息、权限信息、刷新后的令牌过期时间 json字符串缓存进redis并设置redis key过期时间,如图
8.生成JWT令牌和过期时间返回
4.gateway网关返回ruoyi-auth认证服务的auth/login接口返回的JWT令牌和过期时间
网关认证 ruoyi-gateway->AuthFilter过滤器(Spring WebFlux Mono异步非阻塞)
1.获取拦截请求信息,拿到请求的url路径
2.校验url是否在白名单内,是则跳过
3.获取token令牌,对token令牌进行合法性校验,并且解析token令牌,解析不通过则抛错
4.校验redis是否存在userkey,不存在则抛错(手动强退用户)
5.解析jwt token中携带的用户信息,对用户信息进行合法性校验(userid、username)
6.将用户信息和请求来源标识添加到请求头中,供下游应用使用
7.继续执行过滤器链
表结构(RBAC模型 用户-角色-权限,多对多关系)
sys_user 用户信息表
sys_role 角色信息表
sys_menu 菜单权限表
sys_role_menu 角色和菜单关联表
sys_user_role 用户和角色关联表
sys_post 岗位表
sys_user_role 岗位用户关联表 多对一
sys_dept 部门表
sys_role_dept 角色部门关系表 一对多
PreAuthorizeAspect(AOP+自定义注解)
@RequiresPermissions 必须具有指定权限才能进入该方法,数据来源:查库
@RequiresRoles 必须具有指定角色标识才能进入该方法,数据来源:redis
@RequiresLogin 只有登录之后才能进入该方法,数据来源:redis
数据权限
获取当前请求用户数据
1.解析jwt令牌
2.redis获取
3.SecurityContextHolder获取,来源:登录后生成包含用户信息的jwt令牌->AuthFilter解析令牌后存入请求头->HeaderInterceptor拦截器将用户数据从请求头获取后存入SecurityContextHolder
表结构
sys_user 用户信息表
sys_dept 部门表
sys_role 角色信息表
sys_user_role 用户角色关联表
sys_role_dept 角色部门关联表
注意 :使用这套数据权限校验,表结构里面必须包含dept_id和user_id字段且必须继承BaseEntity类
DataScopeAspect
注解:@DataScope
deptAlias 部门表的别名
userAlias 用户表的别名
permission 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@RequiresPermissions获取,多个权限用逗号分隔开来
原理:使用AOP+自定义注解,通过角色上配置的不同数据权限从而找到对应的部门id集合,将部门id(dept_id)作为条件生成拼接sql,存储到基础类BaseEntity的params map中,执行sql的时候通过${params.dataScope}注入sql拼接后执行,从而限定where范围
可优化问题
1.部门别名没有判空,不看完代码仔细配置,容易拼接报错
2.不查询数据,用的是部门id为0,如果正好有部门的id为0,则达不到要的效果
3.修改删除数据权限校验需要参照用户和部门的方法自己实现 checkUserDataScope
分页
PageUtils
PageHelper
TableSupport
优化点
1.权限粒度不够细,很多场景不能满足
1.董事长权限比普通员工要高
2.职级关系权限继承
3.不同角色有不同的数据权限,比如某个角色只能查看订单金额为100-500的数据
2.mybatis比较繁琐,对单表操作效率不够高、不够灵活,可以换成mybatis-plus
mp数据权限隔离 https://blog.csdn.net/qq_42402854/article/details/139099661
3.swagger 原生ui交互比较老,使用不友好,生成接口文档不友好,可以换成knife4j
入参和返回参数注释需要调整成swagger注解模式
http://localhost:9201/doc.html#/home
4.jwt+redis违背了jwt去中心化的初衷,这里jwt只用于生成token令牌
5.可以用lombok插件注解的方式减少get set方法等
6.ruoyi-job可以替换成xxl-job
使用quartz+Feign+nacos方式,由于Feign的特性,调度中心和执行器之间没有完全解耦,需要申明FeignClient.
邮件报警
传参执行
运行报表
分片调度?
...
配置对比图
7.接口入参增加泛型类 字段全局唯一链路号、请求时间戳
8.增加Spring Cloud Stream以便于各种mq的集成

收藏
0 条评论
下一页