mybatis-plus的数据脱敏使用

最近看 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=10&useSSL=false&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=10&useSSL=false&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);

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值