# ♥属性加解密插件♥

提示

之前工作的时候,遇到一个数据加密的需求,大致就是平台的一些敏感数据需要进行脱敏,因为项目已经运行很长一段时间,再加上系统很多,所以就开发了这个插件,相信工作上的小伙伴都或多或少的接触过 接下来我就将插件的能力和使用方法和大家分享下,源码 (opens new window)自取,素质star。@123


# 介绍

这个项目用到了mybatis提供的拦截器,初学的小伙伴可以先了解下mybatis拦截器的作用。这个需求我主要是想通过在入参和出参的节点加对应的拦截逻辑,恰好mybatis提供了对应的能力

@Intercepts(
        {
                @Signature(type = ParameterHandler.class, method = "setParameters", args = {PreparedStatement.class}),
        })
public class EncryptInMybatisInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 入参修改逻辑
    }
}
1
2
3
4
5
6
7
8
9
10

返参修改逻辑,正规叫结果集合处理

@Intercepts(
        {
                @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}),
        })
@Import(cn.hutool.extra.spring.SpringUtil.class)
public class DecryptOutMybatisInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 结果处理逻辑
    }
}
1
2
3
4
5
6
7
8
9
10
11

通过上面两个方法为基础,对逻辑todo加入自己业务的处理方法,源码 (opens new window) 已经做了适当的处理,只需要开发继承对应的方法,实现加解密方法即可

# 使用方式


此jar未上传公共私服,请下载本地仓库进行引用,项目已配置本地上传组件,使用gradle的upload上传本地 引用方式:implementation 'com.cas:mybatis-desensitization:0.0.1'

配置文件开启 在application.yml 中配置开启加解密插件

cas:
  desensitize:
    ## 是否开启加解密插件
    enable: true
1
2
3
4

实现 com.cas.service.Desensitize 接口,里面是加解密方法的具体实现,如果不实现,插件将不处理

@Configuration
public class DesensiteConfig implements Desensitize {

    @Override
    public String encryptData(String s) {
        return s + "123";
    }

    @Override
    public String decryptData(String s) {
        return s + "456";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

在需要加密的类和字段上打注解,类上使用@ConfidentialType ,属性上使用@Confidential

@ConfidentialType
public class Account {

    private String id;
    /**
    * 确认要校验,长度最长为20,正则表达式满足:"^\\d{1,10}$"
    */
    @Confidential(value = true, max = 20, regular = "^\\d{1,10}$")
    private String userId;
    private Float balance;
    // ...
}
1
2
3
4
5
6
7
8
9
10
11
12

# 参考

源码 (opens new window)

使用插件案例 (opens new window)

# 感谢

您好,如果文档能帮助到您,希望可以满足作者的小小虚荣心,在源码的项目上点一个小小的star ♥️

Last Updated: 3/1/2024, 2:20:42 PM