wordpress 微博主題 twitter主題seo建站要求
? ? ? ? 學(xué)習(xí)了《正則匹配人名》和《正則匹配電話號(hào)碼》,如果要一起進(jìn)行脫敏處理,改怎么做? 脫敏的,考慮配置規(guī)則,進(jìn)行匹配的方式進(jìn)行處理:
脫敏規(guī)則:
DesensitizationRules
@Data
public class DesensitizationRules {/*** 匹配的字段名稱*/public String fieldName;/*** 是否開啟匹配 true 是 false 否*/public Boolean enabled;/*** 匹配的表達(dá)式*/public String regularExpr;/*** 替換的表達(dá)式*/public String replaceExpr;
}
數(shù)據(jù)模擬:
public static List<DesensitizationRules> mockConfig(){String data = "[\n" +"\t{\n" +"\t\t\"fieldName\": \"staffName\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\S)([a-zA-Z0-9_\\\\s\\\\u4e00-\\\\u9fa5]+)\",\n" +"\t\t\"replaceExpr\": \"$1**\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"mobile\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\d{3})\\\\d{4}(\\\\d{4})\",\n" +"\t\t\"replaceExpr\": \"$1****$2\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"tel\",\n" +"\t\t\"enabled\": false,\n" +"\t\t\"regularExpr\": \"(\\\\d{3})\\\\d{4}(\\\\d{4})\",\n" +"\t\t\"replaceExpr\": \"$1****$2\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"email\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\w?)(\\\\w+)(\\\\w)(@\\\\w+\\\\.[a-z]+(\\\\.[a-z]+)?)\",\n" +"\t\t\"replaceExpr\": \"$1****$3$4\"\n" +"\t}\n" +"]";DesensitizationRules single;List<DesensitizationRules> rules = new ArrayList<>();for(Object map: JSONArray.parseArray(data)){single= JSON.parseObject(JSONObject.toJSONString(map),DesensitizationRules.class);rules.add(single);}return rules;}
測(cè)試數(shù)據(jù):
FlowStaff
@Data
public class FlowStaff {private String staffName;private String phs;private String email;private String mobile;private String tel;private String orgId;private String orgName;private String staffId;private String staffaName;private String regionName;private String regionId;
}
模擬數(shù)據(jù):
public static List<FlowStaff> mockData(){String receiveStr = "[\n" +"\t{\n" +"\t\t\"staffName\": \"張三飛\",\n" +"\t\t\"phs\": null,\n" +"\t\t\"email\": \"13456789@qq.com\",\n" +"\t\t\"mobile\": \"18920220711\",\n" +"\t\t\"tel\": \"18920220711,18955462232\",\n" +"\t\t\"orgName\": \"組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門\",\n" +"\t\t\"staffId\": \"1\",\n" +"\t\t\"staffaName\": null,\n" +"\t\t\"regionName\": \"福建\",\n" +"\t\t\"orgId\": 59\n" +"\t},\n" +"\t{\n" +"\t\t\"staffName\": \"Luck Kevin\",\n" +"\t\t\"phs\": null,\n" +"\t\t\"email\": \"12345678@qq.com\",\n" +"\t\t\"mobile\": \"18920228733\",\n" +"\t\t\"tel\": \"18920228733,18955462252\",\n" +"\t\t\"orgName\": \"組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門\",\n" +"\t\t\"staffId\": \"2\",\n" +"\t\t\"staffaName\": null,\n" +"\t\t\"regionName\": \"福建\",\n" +"\t\t\"orgId\": 59\n" +"\t}\n" +"]";System.out.println(receiveStr);FlowStaff single;List<FlowStaff> flowStaffs = new ArrayList<>();for(Object map: JSONArray.parseArray(receiveStr)){single= JSON.parseObject(JSONObject.toJSONString(map),FlowStaff.class);flowStaffs.add(single);}return flowStaffs;}
處理:
? ? ? ? 根據(jù)規(guī)則,先獲取配置中enabled 為true,然后對(duì)數(shù)據(jù)進(jìn)行依次替換脫敏:
public static void main(String args[]) {List<DesensitizationRules> rules = mockConfig();List<FlowStaff> receivers = mockData();// 過濾需要脫敏的enable = true的配置List<DesensitizationRules> filterRules = ListUtils.emptyIfNull(rules).stream().filter(DesensitizationRules::getEnabled).collect(Collectors.toList());if(CollectionUtils.isEmpty(filterRules)){System.out.println("not have the config rule!");return;}String receiversStr = JSONObject.toJSONString(receivers);for (DesensitizationRules value : filterRules) {receiversStr = replaceCommon(receiversStr, value.getFieldName(), value.getRegularExpr(), value.getReplaceExpr());}System.out.println("============ mask ============ ");System.out.println(receiversStr);}public static String replaceCommon(String aimStr, String key, String regularExpr, String replaceExpr) {return aimStr.replaceAll( "\""+key+"\""+":\\s*\""+regularExpr+"\"", "\""+key+"\""+":\""+replaceExpr+"\"");}
輸出:
[{"email": "1****9@qq.com","mobile": "189****0711","orgId": "59","orgName": "組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門","regionName": "福建","staffId": "1","staffName": "張**","tel": "18920220711,18955462232"},{"email": "1****8@qq.com","mobile": "189****8733","orgId": "59","orgName": "組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門","regionName": "福建","staffId": "2","staffName": "L**","tel": "18920228733,18955462252"}
]
把tel的配置enabled改成true再執(zhí)行,輸出:
============ mask ============
[{"email": "1****9@qq.com","mobile": "189****0711","orgId": "59","orgName": "組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門","regionName": "福建","staffId": "1","staffName": "張**","tel": "189****0711,189****2232"},{"email": "1****8@qq.com","mobile": "189****8733","orgId": "59","orgName": "組織機(jī)構(gòu)/公司領(lǐng)導(dǎo)部門","regionName": "福建","staffId": "2","staffName": "L**","tel": "189****8733,189****2252"}
]
????????可以看到人名(staffName)和電話號(hào)碼(mobile),都進(jìn)行了脫敏。?tel進(jìn)行設(shè)置后,也脫敏了。達(dá)到想要的效果
總結(jié):
? ? ? ? 對(duì)數(shù)據(jù)進(jìn)行脫敏,可以考慮根據(jù)配置規(guī)則,這樣可以動(dòng)態(tài)修改規(guī)則,指定字段內(nèi)容進(jìn)行脫敏,會(huì)比較方便。 也可以考慮用正則表達(dá)式
? ? ? 《java 使用正則進(jìn)行匹配人名電話》