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