@@ -368,38 +368,43 @@ FastJSON 实现数据脱敏的方式主要有两种:
368
368
- 基于注解 ` @JSONField ` 实现:需要自定义一个用于脱敏的序列化的类,然后在需要脱敏的字段上通过 ` @JSONField ` 中的 ` serializeUsing ` 指定为我们自定义的序列化类型即可。
369
369
- 基于序列化过滤器:需要实现 ` ValueFilter ` 接口,重写 ` process ` 方法完成自定义脱敏,然后在 JSON 转换时使用自定义的转换策略。具体实现可参考这篇文章: < https://juejin.cn/post/7067916686141161479 > 。
370
370
371
- ### Mybatis-mate
371
+ ### Mybatis-Mate
372
372
373
- MybatisPlus 也提供了数据脱敏模块 mybatis-mate。mybatis-mate 为 MybatisPlus 企业级模块,使用之前需要配置授权码(付费),旨在更敏捷优雅处理数据。
373
+ 先介绍一下 MyBatis、MyBatis-Plus 和 Mybatis-Mate 这三者的关系:
374
374
375
- 配置内容如下所示:
375
+ - MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
376
+ - MyBatis-Plus 是一个 MyBatis 的增强工具,能够极大地简化持久层的开发工作。
377
+ - Mybatis-Mate 是为 MyBatis-Plus 提供的企业级模块,旨在更敏捷优雅处理数据。不过,使用之前需要配置授权码(付费)。
376
378
377
- ``` yaml
378
- # Mybatis Mate 配置
379
- mybatis-mate :
380
- cert :
381
- grant : jxftsdfggggx
382
- license : GKXP9r4MCJhGID/DTGigcBcLmZjb1YZGjE4GXaAoxbtGsPC20sxpEtiUr2F7Nb1ANTUekvF6Syo6DzraA4M4oacwoLVTglzfvaEfadfsd232485eLJK1QsskrSJmreMnEaNh9lsV7Lpbxy9JeGCeM0HPEbRvq8Y+8dUt5bQYLklsa3ZIBexir+4XykZY15uqn1pYIp4pEK0+aINTa57xjJNoWuBIqm7BdFIb4l1TAcPYMTsMXhF5hfMmKD2h391HxWTshJ6jbt4YqdKD167AgeoM+B+DE1jxlLjcpskY+kFs9piOS7RCcmKBBUOgX2BD/JxhR2gQ==
383
- ` ` `
379
+ Mybatis-Mate 支持敏感词脱敏,内置手机号、邮箱、银行卡号等 9 种常用脱敏规则。
380
+
381
+ ``` java
382
+ @FieldSensitive (" testStrategy" )
383
+ private String username;
384
+
385
+ @Configuration
386
+ public class SensitiveStrategyConfig {
387
+
388
+ /**
389
+ * 注入脱敏策略
390
+ */
391
+ @Bean
392
+ public ISensitiveStrategy sensitiveStrategy () {
393
+ // 自定义 testStrategy 类型脱敏处理
394
+ return new SensitiveStrategy (). addStrategy(" testStrategy" , t - > t + " ***test***" );
395
+ }
396
+ }
384
397
385
- 具体实现可参考 baomidou 提供的如下代码:<https://gitee.com/baomidou/mybatis-mate-examples> 。
398
+ // 跳过脱密处理,用于编辑场景
399
+ RequestDataTransfer . skipSensitive();
400
+ ```
386
401
387
402
### MyBatis-Flex
388
403
389
404
类似于 MybatisPlus,MyBatis-Flex 也是一个 MyBatis 增强框架。MyBatis-Flex 同样提供了数据脱敏功能,并且是可以免费使用的。
390
405
391
406
MyBatis-Flex 提供了 ` @ColumnMask() ` 注解,以及内置的 9 种脱敏规则,开箱即用:
392
407
393
- - 用户名脱敏
394
- - 手机号脱敏
395
- - 固定电话脱敏
396
- - 身份证号脱敏
397
- - 车牌号脱敏
398
- - 地址脱敏
399
- - 邮件脱敏
400
- - 密码脱敏
401
- - 银行卡号脱敏
402
-
403
408
``` java
404
409
/**
405
410
* 内置的数据脱敏方式
@@ -465,14 +470,57 @@ public class Account {
465
470
466
471
如果这些内置的脱敏规则不满足你的要求的话,你还可以自定义脱敏规则。
467
472
468
- # # 总结
473
+ 1、通过 ` MaskManager ` 注册新的脱敏规则:
474
+
475
+ ``` java
476
+ MaskManager . registerMaskProcessor(" 自定义规则名称"
477
+ , data - > {
478
+ return data;
479
+ })
480
+ ```
469
481
470
- 本文主要介绍了数据脱敏的相关内容,首先介绍了数据脱敏的概念,在此基础上介绍了常用的数据脱敏规则;随后介绍了本文的重点 Hutool 工具及其使用方法,在此基础上进行了实操,分别演示了使用 DesensitizedUtil 工具类、配合 Jackson 通过注解的方式完成数据脱敏;最后,介绍了一些常见的数据脱敏方法,并附上了对应的教程链接供大家参考,本文内容如有不当之处,还请大家批评指正。
482
+ 2、使用自定义的脱敏规则
483
+
484
+ ``` java
485
+ @Table (" tb_account" )
486
+ public class Account {
487
+
488
+ @Id (keyType = KeyType . Auto )
489
+ private Long id;
490
+
491
+ @ColumnMask (" 自定义规则名称" )
492
+ private String userName;
493
+ }
494
+ ```
495
+
496
+ 并且,对于需要跳过脱密处理的场景,例如进入编辑页面编辑用户数据,MyBatis-Flex 也提供了对应的支持:
497
+
498
+ 1 . ** ` MaskManager#execWithoutMask ` ** (推荐):该方法使用了模版方法设计模式,保障跳过脱敏处理并执行相关逻辑后自动恢复脱敏处理。
499
+ 2 . ** ` MaskManager#skipMask ` ** :跳过脱敏处理。
500
+ 3 . ** ` MaskManager#restoreMask ` ** :恢复脱敏处理,确保后续的操作继续使用脱敏逻辑。
501
+
502
+ ` MaskManager#execWithoutMask ` 方法实现如下:
503
+
504
+ ``` java
505
+ public static < T > T execWithoutMask(Supplier<T > supplier) {
506
+ try {
507
+ skipMask();
508
+ return supplier. get();
509
+ } finally {
510
+ restoreMask();
511
+ }
512
+ }
513
+ ```
514
+
515
+ ` MaskManager ` 的` skipMask ` 和` restoreMask ` 方法一般配套使用,推荐` try{...}finally{...} ` 模式。
516
+
517
+ ## 总结
471
518
472
- # # 推荐阅读
519
+ 这篇文章主要介绍了:
473
520
474
- - [Spring Boot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!](https://mp.weixin.qq.com/s/59osrnjyPJ7BV070x6ABwQ)
475
- - [大厂也在用的 6 种数据脱敏方案,严防泄露数据的“内鬼”](https://mp.weixin.qq.com/s/_Dgekk1AJsIx0TTlnH6kUA)
521
+ - 数据脱敏的定义:数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
522
+ - 常用的脱敏规则:替换、删除、重排、加噪和加密。
523
+ - 常用的脱敏工具:Hutool、Apache ShardingSphere、FastJSON、Mybatis-Mate 和 MyBatis-Flex。
476
524
477
525
## 参考
478
526
0 commit comments