mybatis-plus的数据脱敏使用

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

1.mybatis-mate能做什么?

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

2.具体使用

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

   
      com.baomidou
      mybatis-mate-starter
      1.0.8
   

 

  1.   com.baomidou

  2.   mybatis-mate-starter

  3.   1.0.8

注解(实体分包使用):

主要功能介绍
  • 字段脱敏

  • 数据敏感词过滤

  • 字段加密解密

  • 数据审计(对账)

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

  • 字典绑定

  • 表结构动态维护

  • 数据范围(数据权限)

(1)字段脱敏

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

属性 类型 必须指定 默认值 描述
type String "" 脱敏类型
@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 getUrlPatterns() {
             return super.getUrlPatterns();
             }
             */

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

            @Override
            public String handle(String fieldName, String fieldValue, Collection 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 等算法。

属性 类型 必须指定 默认值 描述
password String "" 加密密码
algorithm Algorithm PBEWithMD5AndDES PBE MD5 DES 混合算法
encryptor Class IEncryptor 加密处理器
@FieldEncrypt
private String email;

(4)数据审计(对账)

applicationEventPublisher.publishEvent(new DataAuditEvent((t) -> {
    // 异步回调
    List 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

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

  • 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 getFourInfo(@Param("id") String id);

你可能感兴趣的:(java,java,开发语言,后端)