0
点赞
收藏
分享

微信扫一扫

mybatis-plus的数据脱敏使用

捡历史的小木板 2022-01-04 阅读 45

最近看 mybatis - Plus 官方发布的神器:mybatis-mate ,功能十分强大,我简单给大家说下

1.mybatis-mate能做什么?

mybatis-mate 为mybatis-plus企业级模块,支持分库分表,数据审计、数据敏感词过滤(AC 算法),字段加密,字典回写(数据绑定),数据权限,表结构自动生成 SQL 维护等

2.具体使用

Spring Boot 引入自动依赖注解包 :

   <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-mate-starter</artifactId>
<version>1.0.8</version>
</dependency>

 

  1. <dependency>

  2.   <groupId>com.baomidou</groupId>

  3.   <artifactId>mybatis-mate-starter</artifactId>

  4.   <version>1.0.8</version>

  5. </dependency>

注解(实体分包使用):

主要功能介绍
  • 字段脱敏

  • 数据敏感词过滤

  • 字段加密解密

  • 数据审计(对账)

  • 数据库分库分表、动态据源、读写分离、数据库健康检查自动切换。

  • 字典绑定

  • 表结构动态维护

  • 数据范围(数据权限)

(1)字段脱敏

注解 @FieldSensitive 即可实现数据脱敏,内置 手机号邮箱银行卡号 等 9 种常用脱敏规则

属性类型必须指定默认值描述
typeString""脱敏类型
@FieldEncrypt(algorithm = Algorithm.PBEWithMD5AndDES)
private String password;

(2)数据敏感词过滤

数据敏感词过滤(AC 算法)配置完处理器,框架自动处理请求的所有字符串敏感词过滤

@Configuration
public class ParamsConfig {
@Resource
private SensitiveWordsMapper sensitiveWordsMapper;

@Bean
public IParamsProcessor paramsProcessor() {
return new SensitiveWordsProcessor() {

/**
// 可以指定你需要拦截处理的请求地址,默认 /* 所有请求
@Override public Collection<String> getUrlPatterns() {
return super.getUrlPatterns();
}
*/


@Override
public List<String> loadSensitiveWords() {
// 这里的敏感词可以从数据库中读取,也可以本文方式获取,加载只会执行一次
return sensitiveWordsMapper.selectList(Wrappers.<SensitiveWords>lambdaQuery().select(SensitiveWords::getWord))
.stream().map(t -> t.getWord()).collect(Collectors.toList());
}

@Override
public String handle(String fieldName, String fieldValue, Collection<Emit> emits) {
if (CollectionUtils.isNotEmpty(emits)) {
try {
// 这里可以过滤直接删除敏感词,也可以返回错误,提示界面删除敏感词
System.err.println("发现敏感词(" + fieldName + " = " + fieldValue + ")" +
"存在敏感词:" + toJson(emits));
String fv = fieldValue;
for (Emit emit : emits) {
fv = fv.replaceAll(emit.getKeyword(), "");
}
return fv;
} catch (Exception e) {
e.printStackTrace();
}
}
return fieldValue;
}
};
}

(3)字段加密解密

注解 @FieldEncrypt 即可实现对字段的加密解密,支持 MD5_32、MD5_16、AES、RSA 等算法。

属性类型必须指定默认值描述
passwordString""加密密码
algorithmAlgorithmPBEWithMD5AndDESPBE MD5 DES 混合算法
encryptorClassIEncryptor加密处理器
@FieldEncrypt
private String email;

(4)数据审计(对账)

applicationEventPublisher.publishEvent(new DataAuditEvent((t) -> {
// 异步回调
List<Change> changes = t.apply(newVersion, oldVersion);
for (Change valueChange : changes) {
ValueChange change = (ValueChange) valueChange;
System.err.println(String.format("%s不匹配,期望值 %s 实际值 %s", change.getPropertyName(), change.getLeft(), change.getRight()));
}
}));

(5)多数据源分库分表(读写分离)

  • 注解 @Sharding

属性类型必须指定默认值描述
valueString""分库组名,空使用默认主数据源
strategyClassRandomShardingStrategy分库&分表策略
  • 配置

  • spring:
    datasource:
    dynamic:
    primary: master
    strict: false
    datasource:
    master:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://rm-xxxx.mysql.rds.aliyuncs.com:3306/xxx?autoReconnect=true&failOverReadOnly=false&maxReconnects=10false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8
    username: xxxxxx
    password: xxxx!
    slave_1:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://rm-xxxxx.mysql.rds.aliyuncs.com:3306/xxx?autoReconnect=true&failOverReadOnly=false&maxReconnects=10false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8
    username: xxxx
    password: xxxx!

  • 数据源切换

  • /**
    * 查询四个软件事件详情
    * @param id
    * @return
    */

    @DS("slave_1")
    Map<String, Object> getFourInfo(@Param("id") String id);

举报

相关推荐

0 条评论