1.SQL数据脱敏实现
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
2.JAVA数据脱敏实现
数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。
3.hutools工具类
引入hutools包
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version> </dependency>
hutools提供了一个工具类 DesensitizedUtil,目前提供了以下几种脱敏方式
使用
// 手机号中间4位脱敏
DesensitizedUtil.mobilePhone(user.getMobilePhone())
// 身份证保留前2位,最后2位
DesensitizedUtil.idCardNum(user.getIdCardNum(), 2,2)
4.mybatis-mate-sensitive-jackson
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;
}