作用
在使用日志打印时,存在很多的敏感信息。针对这些特殊的数据,需要做出脱敏处理。而且下面的正则表达式则可以提取出日志信息中的key-value键值对,然后对指定的key做出信息脱敏,这样就可以保证日志数据的安全性。
正则表达式
public static final Pattern REGEX_PATTERN = Pattern.compile("\\s*([\"]?[\\w]+[\"]?)(\\s*[:=]+[^\\u4e00-\\u9fa5@,.*{\\[\\w]*\\s*)([\\u4e00-\\u9fa5_\\-@.\\w]+)[\\W&&[^\\-@.]]?\\s*");
代码案例
import com.alibaba.fastjson.JSON;
import org.example.properties.AccountProperties;
import org.junit.Test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 苦瓜不苦
* @date 2022/11/2 15:02
**/
public class RegexTest {
// 正则匹配模式 - 该正则表达式第三个()可能无法匹配以某些特殊符号开头和结尾的(如果像密码这种字段,前后如果有很多特殊字段,则无法匹配)
public static final Pattern REGEX_PATTERN = Pattern.compile("\\s*([\"]?[\\w]+[\"]?)(\\s*[:=]+[^\\u4e00-\\u9fa5@,.*{\\[\\w]*\\s*)([\\u4e00-\\u9fa5_\\-@.\\w]+)[\\W&&[^\\-@.]]?\\s*");
@Test
public void test() {
AccountProperties properties = new AccountProperties();
properties.setPrivateKey("我寄愁心与明月");
properties.setPublicKey("随风直到夜郎西");
String pojoString = properties.toString();
String jsonString = JSON.toJSONString(properties);
matchKeyValue(pojoString);
matchKeyValue(jsonString);
}
/**
* 正则匹配方法
*
* @param content
*/
private static void matchKeyValue(String content) {
Matcher matcher = REGEX_PATTERN.matcher(content);
while (matcher.find()) {
// group(1)就是key,group(2)就是分隔符(如:和=),group(3)就是value
System.err.println(matcher.group());
System.err.println(matcher.group(1));
System.err.println(matcher.group(2));
System.err.println(matcher.group(3));
}
}
}