# sensitive-plus
**Repository Path**: dingjunjun_codeSpace/sensitive-plus
## Basic Information
- **Project Name**: sensitive-plus
- **Description**: 数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏
一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 136
- **Created**: 2024-01-23
- **Last Updated**: 2024-01-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 1、说明
数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏
一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则
具体使用请参考单元测试下的
```
com.yhq.sensitive.UserEntity
com.yhq.sensitive.SensitiveTests.test
```
# 2、注解说明
|注解名称|作用描述|
| --------| :----: |
|@SensitiveAddress|地址脱敏|
|@SensitiveBankCard|银行卡脱敏|
|@SensitiveChineseName|中文姓名脱敏|
|@SensitiveFixedPhone|固话脱敏|
|@SensitiveIdCard|身份证脱敏|
|@SensitiveMobile|手机号码脱敏|
|@SensitivePassword|密码脱敏|
# 3、重写脱敏展示的内容
|注解名称|作用描述|
| --------| :----: |
|@SensitiveInfo(strategy = SensitiveAddress.class)|地址脱敏|
|@SensitiveInfo(strategy = SensitiveBankCard.class)|银行卡脱敏|
|@SensitiveInfo(strategy = SensitiveChineseName.class)|中文姓名脱敏|
|@SensitiveInfo(strategy = SensitiveFixedPhone.class)|固话脱敏|
|@SensitiveInfo(strategy = SensitiveIdCard.class)|身份证脱敏|
|@SensitiveInfo(strategy = SensitiveMobile.class)|手机号码脱敏|
|@SensitiveInfo(strategy = SensitivePassword.class)|密码脱敏|
如11位的手机号,默认脱敏策略是 显示前三后四,如 `183****1309`,自定义策略后
```
@SensitiveInfo(strategy = SensitiveMobile.class,begin = 4,end = 3)
```
显示结果为 `1837****309`
银行卡号自定义脱敏,例如
```
@SensitiveInfo(pattern = "(?<=\\w{6})\\w(?=\\w{4})",replaceChar = "*")
```
# 4 、日志脱敏
user 为实体对象
```
log.info(JsonMapper.nonNullMapper().toJson(userEntity));
```
整体测试结果如下
```
{
"userNamePattern":"张**",
"userNameLength":"张**",
"passwordPattern":"************",
"passwordLength":"******",
"idCardPattern":"**************6789",
"idCardLength":"********6789",
"fixedPhonePattern":"********4321",
"fixedPhoneLength":"********4321",
"mobilePattern":"156****0987",
"mobileLength":"156****0987",
"addressPattern":"北京市东城*****戴斯酒店",
"addressLength":"北京市东城区东华门街道北京******",
"emailPattern":"23***@qq.com",
"emailLength":"2****@qq.com",
"bankCardPattern":"6212***********2455",
"bankCardCustomizePattern":"621226*********2455",
"bankCardLength":"621226*********2455"
}
```
# 5 、DFA算法 敏感词库脱敏
读取敏感词库 com.yhq.sensitive.util.SensitiveWordInit
敏感词工具类 com.yhq.sensitive.util.SensitiveWordFilter
由于一些词汇违规,所以以拼音代替,请自行脑补
|方法|作用描述|
| --------| :----: |
|boolean isContainSensitiveWord(String txt,int matchType)|判断是否存在敏感词|
|Set getSensitiveWord(String txt , int matchType)|获取敏感词|
|replaceSensitiveWord(String txt,int matchType,String replaceChar)|敏感词替代|
单元测试类
```
com.yhq.sensitive.SensitiveWordFilterTest.test
测试结果如下
17:02:43.507 [main] INFO com.yhq.sensitive.SensitiveWordFilterTest - 敏感词的数量:893
17:02:43.511 [main] INFO com.yhq.sensitive.SensitiveWordFilterTest - 待检测语句字数:184
17:02:43.511 [main] INFO com.yhq.sensitive.SensitiveWordFilterTest - 语句中包含敏感词的个数为:3个
17:02:43.511 [main] INFO com.yhq.sensitive.SensitiveWordFilterTest - 总共消耗时间为:18
```