业务场景:数据库中查出来数据展示到前端时,对于敏感字段需要掩码处理。
实现方案:数据库捞出结果集之后去下面的encryptEntity或encryptJsonArray这两个方法里撸一遍。
具体代码实现:
package com.cn.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.common.collect.Maps;
/**
* 掩码工具类
* @author Dabria_ly
*
*/
public class MaskUtil {
private static final Logger logger = LoggerFactory.getLogger(MaskUtil.class);
public static final String ENCRYPT_DEF = "***"; //默认全掩码
/**
* 敏感信息掩码
*
* @param jsonString JsonString
* @param maskKeys 自定义需要进行掩码的Key
* @return
*/
public static Object maskJsonString(String jsonString, String... maskKeys) {
try {
boolean isJsonObject = isJsonObject(jsonString);
boolean isJsonArray = isJsonArray(jsonString);
if (!isJsonObject && !isJsonArray) {
return StringUtils.EMPTY;
}
if (isJsonObject) {
return jsonObjectHelper(jsonString, maskKeys);
}
return jsonArrayHelper(jsonString, maskKeys);
} catch (Exception e) {
return StringUtils.EMPTY;
}
}
/**
* String类型的JSONObject
* @param jsonString
* @param maskKeys
* @return
*/
private static Object jsonObjectHelper(String jsonString, String... maskKeys) {
JSONObject originalJsonObject = JSONObject.parseObject(jsonString);
if (null != originalJsonObject) {
Set<String> keySets = originalJsonObject.keySet();
for (String key : keySets) {
for (String maskKey : maskKeys) {
if (key.equalsIgnoreCase(maskKey)) {
originalJsonObject.put(key, maskByKey(key, originalJsonObject.get(key)));