Yudao 框架增强能力
核心定位
一句话说清楚:在 Yudao 原生能力之上,RuoYiPlus 对框架基础设施进行了 8 大维度的企业级增强,让框架具备「开箱即用」的生产级能力。
解决什么问题
| 痛点 | Yudao 原生 | RuoYiPlus 增强后 |
|---|---|---|
| 数据权限不够细 | 仅部门级过滤 | 用户/角色/岗位/部门四层 + 字段级 |
| 敏感信息泄露风险 | 无脱敏机制 | 注解式自动脱敏 |
| 操作日志不完整 | 基础日志 | 智能变更追踪 + 风险评分 + 区块链存证 |
| API 缺乏保护 | 基础路由 | 请求签名 + 限流 + 熔断 |
| 分布式能力弱 | 无 | 分布式事务 + 锁 + 幂等 |
| 缓存策略单一 | Redis 单层 | Caffeine + Redis 多级缓存 |
| 数据库扩展难 | 单库 | 读写分离 + 分库分表 + 数据归档 |
| 监控能力弱 | 无 | SkyWalking 全链路追踪 + 自定义指标 |
适合什么样的用户
1. 数据权限引擎
1.1 四层权限模型
优先级最高"] G["角色权限"] H["岗位权限"] I["部门权限
优先级最低"] F ~~~ G ~~~ H ~~~ I end subgraph "权限决策引擎" A["用户请求"] --> B["权限解析"] B --> C["权限合并"] C --> D["数据过滤"] D --> E["等级过滤"] end subgraph "权限过滤" J["SQL 过滤"] --> K["返回结果"] end 权限来源 --> 权限决策引擎 权限决策引擎 --> 权限过滤 style B fill:#FFA500,color:#fff,font-weight:bold
1.2 能力对比
| 能力项 | 原生支持 | 增强后 |
|---|---|---|
| 部门级数据过滤 | ✅ | ✅ |
| 角色级数据过滤 | ❌ | ✅ |
| 自定义 SQL 过滤 | ❌ | ✅ |
| 字段级权限控制 | ❌ | ✅ |
| 动态数据权限规则 | ❌ | ✅ |
| 客户等级过滤 | ❌ | ✅ |
1.3 使用方式
// 基于角色的数据权限:销售经理看团队数据,区域总监看本区域数据
@DataPermission(roles = {"sales_manager", "region_director"})
public class CustomerServiceImpl { }
// 基于部门的层级权限
@DataPermission(deptIds = "#{currentUser.deptId}")
public class ReportService { }
// 自定义数据范围
@DataPermission(scope = "custom", sqlFilter = "region_id = #{currentUser.regionId}")
public class RegionService { }
// 字段隐藏
@DataPermission(fields = {"salary", "bankCard"}, operation = DataPermission.Operation.HIDE)
public class EmployeeService { }
// 字段只读
@DataPermission(fields = {"createTime", "creator"}, operation = DataPermission.Operation.READONLY)
public class OrderService { }
2. 敏感字段脱敏
2.1 脱敏架构
2.2 支持的脱敏类型
| 脱敏类型 | 示例 | 说明 |
|---|---|---|
| 手机号 | 138****1234 |
中间4位脱敏 |
| 邮箱 | a***@163.com |
用户名脱敏 |
| 身份证 | 310***********1234 |
出生日期+后4位脱敏 |
| 银行卡 | **** **** **** 1234 |
仅保留后4位 |
| 姓名 | 张* |
姓氏外脱敏 |
| 地址 | 上海市徐汇区**** |
详细地址脱敏 |
| 密码 | ****** |
完全脱敏 |
2.3 使用方式
// 注解式脱敏
public class Customer {
@SensitiveField(type = SensitiveType.PHONE)
private String phone;
@SensitiveField(type = SensitiveType.EMAIL)
private String email;
@SensitiveField(type = SensitiveType.ID_CARD)
private String idCard;
}
// 查询时自动脱敏
@SensitiveQuery(fields = {"phone", "email"})
public List<Customer> getCustomerList(CustomerQuery query) { }
3. 操作日志中心
3.1 日志体系
3.2 智能变更追踪
// 自动对比修改前后差异,仅记录变更字段
@OperateLog(title = "客户管理", businessType = BusinessType.UPDATE)
public void updateCustomer(Customer customer) { }
3.3 敏感操作告警
aegis:
audit:
alert-rules:
- event: "数据导出"
threshold: 10 # 10分钟内超过10次
action: "notify_admin"
- event: "批量删除"
action: "require_approval"
4. API 网关增强
4.1 网关架构
4.2 增强特性
| 能力项 | 说明 |
|---|---|
| 请求签名 | API 请求签名验证,防篡改 |
| 流量控制 | 多维度限流策略 |
| 熔断降级 | 服务熔断保护 |
| 请求缓存 | API 响应缓存 |
| 协议转换 | SOAP → REST 转换 |
5. 服务治理能力
5.1 分布式事务
基于 Seata 的分布式事务解决方案:
5.2 分布式锁与幂等
// Redis + Redisson 分布式锁
@DistributedLock(key = "order:lock:", waitTime = 30, leaseTime = 60)
public void processOrder(Order order) { }
// 幂等控制
@Idempotent(key = "order:create:{userId}:{productId}", expireTime = 60)
public Order createOrder(CreateOrderRequest request) { }
6. 缓存增强
6.1 多级缓存架构
6.2 注解式缓存
@Cacheable(name = "user:list:", expire = 300)
public List<User> getUserList() { }
@CacheEvict(name = "user:list:")
public void updateUser(User user) { }
@CachePut(name = "user:{id}")
public User getUser(Long id) { }
7. 数据库增强
| 能力 | 说明 |
|---|---|
| 读写分离 | 自动路由读写请求,dynamic-datasource |
| 分库分表 | ShardingSphere 分片策略 |
| 数据归档 | 自动冷热数据分离,定时归档 |
8. 监控增强
- 全链路追踪:集成 SkyWalking 分布式追踪
- 自定义指标:
@CustomMonitor注解自动记录 - 告警规则:支持多级阈值告警
技术架构总览
四层权限+字段级"] P2["敏感字段脱敏
注解式自动脱敏"] P3["操作日志中心
变更追踪+区块链存证"] P4["API 网关
签名+限流+熔断"] P5["服务治理
分布式事务+锁+幂等"] P6["多级缓存
Caffeine+Redis"] P7["数据库增强
读写分离+分库分表"] P8["全链路监控
SkyWalking+自定义指标"] end subgraph "Yudao Framework Core" CORE["Spring Boot 3 + MyBatis-Plus + Redis"] end P1 --> CORE P2 --> CORE P3 --> CORE P4 --> CORE P5 --> CORE P6 --> CORE P7 --> CORE P8 --> CORE