1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
| public enum MarkStrategyEnum implements IMark { PHONE("phone", "手机号码") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的手机号字段为空,不处理."); return source; }
String left = source.substring(0, 3); String right = source.substring(source.length() - 4);
return left + "****" + right;
} catch (Exception e) { logger.warn("手机号字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } },
ID_CARD("id_card", "身份证号") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的身份证号字段为空,不处理."); return source; }
String left = source.substring(0, 6); String right = source.substring(source.length() - 4);
return left + "****" + right;
} catch (Exception e) { logger.warn("身份证号字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } },
NAME("name", "姓名") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的姓名字段为空,不处理."); return source; }
String left = source.substring(0, 1); return left + "**";
} catch (Exception e) { logger.warn("姓名字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } },
ADDRESS("address", "地址") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的地址字段为空,不处理."); return source; }
int length = source.length(); if (length > 8) {
String left = source.substring(0, 4); String right = source.substring(source.length() - 4);
return left + "****" + right;
} else if (length >= 4 && length <= 8) {
String left = source.substring(0, 4); return left + "****";
} else {
String left = source.substring(0, length); return left + "****";
}
} catch (Exception e) { logger.warn("地址字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } },
EMAIL("email", "邮箱") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的邮箱字段为空,不处理."); return source; }
int index = source.indexOf("@");
String left = source.substring(0, 3); String right = source.substring(index);
return left + "****" + right;
} catch (Exception e) { logger.warn("邮箱字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } },
BANK_CARD("bank_card", "银行卡") { @Override public String mark(String source) { try {
if (StringUtils.isEmpty(source)) { logger.info("待脱敏的银行卡字段为空,不处理."); return source; }
String left = source.substring(0, 6); String right = source.substring(source.length() - 4); return left + "****" + right;
} catch (Exception e) { logger.warn("银行卡字段脱敏错误,异常收敛并返回原数据,不影响主业务流程|Param:{}|e:", source, e); return source; } } }, ;
private String markType;
private String desc;
public String getMarkType() { return markType; }
public String getDesc() { return desc; }
MarkStrategyEnum(String markType, String desc) { this.markType = markType; this.desc = desc; }
public static MarkStrategyEnum getByMarkType(String markType) {
for (MarkStrategyEnum value : values()) { if (value.getMarkType().equalsIgnoreCase(markType)) { return value; } }
return null;
}
}
|