MYSQL(电话号码,身份证)数据脱敏的实现
- -- CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现
-
- -- CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
- -- LEFT(str,len):返回从字符串str 开始的len 最左字符
- -- RIGHT(str,len):从字符串str 开始,返回最右len 字符
-
- -- 电话号码脱敏sql:
-
- SELECT mobilePhone AS 脱敏前电话号码,CONCAT(LEFT(mobilePhone,3), '********' ) AS 脱敏后电话号码 FROM t_s_user
-
- -- 身份证号码脱敏sql:
-
- SELECT idcard AS 未脱敏身份证, CONCAT(LEFT(idcard,3), '****' ,RIGHT(idcard,4)) AS 脱敏后身份证号 FROM t_s_user
数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。
引入hutools包
cn.hutool hutool-all 5.7.21
hutools提供了一个工具类 DesensitizedUtil,目前提供了以下几种脱敏方式
使用
- // 手机号中间4位脱敏
- DesensitizedUtil.mobilePhone(user.getMobilePhone())
- // 身份证保留前2位,最后2位
- DesensitizedUtil.idCardNum(user.getIdCardNum(), 2,2)
mybatisplus 的新作,可以测试使用,生产需要收费。
根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。
- # 目前已有
- package mybatis.mate.strategy;
-
- public interface SensitiveType {
- String chineseName = "chineseName";
- String idCard = "idCard";
- String phone = "phone";
- String mobile = "mobile";
- String address = "address";
- String email = "email";
- String bankCard = "bankCard";
- String password = "password";
- String carNumber = "carNumber";
- }
使用
- @Getter
- @setter
- public class User {
- private Long id;
- /**
- *这里是一个自定义的策略@link SensitivestrategyConfig}初化注入
- */
- @FieldSensitive("testStrategy")
- private String username;
- /**
- *默认支持策略{@link SensitiveType}
- **/
- @FieldSensitive(SensitiveType.mobile)
- private String mobile;
-
- @FieldSensitive(SensitiveType.email)
- private String email;
- }