@@ -368,38 +368,43 @@ FastJSON 实现数据脱敏的方式主要有两种:
368368- 基于注解 ` @JSONField ` 实现:需要自定义一个用于脱敏的序列化的类,然后在需要脱敏的字段上通过 ` @JSONField ` 中的 ` serializeUsing ` 指定为我们自定义的序列化类型即可。
369369- 基于序列化过滤器:需要实现 ` ValueFilter ` 接口,重写 ` process ` 方法完成自定义脱敏,然后在 JSON 转换时使用自定义的转换策略。具体实现可参考这篇文章: < https://juejin.cn/post/7067916686141161479 > 。
370370
371- ### Mybatis-mate
371+ ### Mybatis-Mate
372372
373- MybatisPlus 也提供了数据脱敏模块 mybatis-mate。mybatis-mate 为 MybatisPlus 企业级模块,使用之前需要配置授权码(付费),旨在更敏捷优雅处理数据。
373+ 先介绍一下 MyBatis、MyBatis-Plus 和 Mybatis-Mate 这三者的关系:
374374
375- 配置内容如下所示:
375+ - MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
376+ - MyBatis-Plus 是一个 MyBatis 的增强工具,能够极大地简化持久层的开发工作。
377+ - Mybatis-Mate 是为 MyBatis-Plus 提供的企业级模块,旨在更敏捷优雅处理数据。不过,使用之前需要配置授权码(付费)。
376378
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+ }
384397
385- 具体实现可参考 baomidou 提供的如下代码:<https://gitee.com/baomidou/mybatis-mate-examples> 。
398+ // 跳过脱密处理,用于编辑场景
399+ RequestDataTransfer . skipSensitive();
400+ ```
386401
387402### MyBatis-Flex
388403
389404类似于 MybatisPlus,MyBatis-Flex 也是一个 MyBatis 增强框架。MyBatis-Flex 同样提供了数据脱敏功能,并且是可以免费使用的。
390405
391406MyBatis-Flex 提供了 ` @ColumnMask() ` 注解,以及内置的 9 种脱敏规则,开箱即用:
392407
393- - 用户名脱敏
394- - 手机号脱敏
395- - 固定电话脱敏
396- - 身份证号脱敏
397- - 车牌号脱敏
398- - 地址脱敏
399- - 邮件脱敏
400- - 密码脱敏
401- - 银行卡号脱敏
402-
403408``` java
404409/**
405410 * 内置的数据脱敏方式
@@ -465,14 +470,57 @@ public class Account {
465470
466471如果这些内置的脱敏规则不满足你的要求的话,你还可以自定义脱敏规则。
467472
468- # # 总结
473+ 1、通过 ` MaskManager ` 注册新的脱敏规则:
474+
475+ ``` java
476+ MaskManager . registerMaskProcessor(" 自定义规则名称"
477+ , data - > {
478+ return data;
479+ })
480+ ```
469481
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+ ## 总结
471518
472- # # 推荐阅读
519+ 这篇文章主要介绍了:
473520
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。
476524
477525## 参考
478526
0 commit comments