在 java 中通过正则表达式模式匹配和替换来屏蔽访问令牌

Masking access token by regex pattern match and replace in java

提问人:nadinCodeHat 提问时间:11/17/2023 最后编辑:Wiktor StribiżewnadinCodeHat 更新时间:11/17/2023 访问量:60

问:

我正在尝试用星号屏蔽访问令牌。响应有效负载将转换为字符串。我需要将令牌模式与字符串匹配,并将令牌值替换为星号。

{"accessToken":"knjnandHJHJBhjHJhjGhjghjGHJGhjgHJGjIG6gg8F68c6F6f6F6d67f79GV78INy8c5SV8n98f5D6g89Byf5446f678u8878GF756d57899bVY7TC6c7VY8UBi9u8","accessTokenExpirationTime":1800}

这应该如下所示

{"accessToken":"*********************************************************************************************************************","accessTokenExpirationTime":1800}

下面的代码找不到匹配项并替换

String payload = PAYLOAD_STRING;
Pattern pattern = Pattern.compile("[a-zA-Z0-9]{126}$");
Matcher matcher = pattern.matcher(payload);
String result = matcher.replaceAll("<h1>*</h1>");
System.out.println(result);
Java 正则表达式 数据掩码

评论


答:

2赞 Youcef LAIDANI 11/17/2023 #1

你可以像这样使用 Pattern & Matcher:

String payload = ....;

Pattern pattern = Pattern.compile("\"accessToken\":\"([a-zA-Z0-9]+)\"");
Matcher matcher = pattern.matcher(payload);

if (matcher.find()) {
    String accessToken = matcher.group(1);
    String maskedToken = "*".repeat(accessToken.length());
    String result = payload.replace(accessToken, maskedToken);
    System.out.println(result);
} else {
    System.out.println("Access token not found.");
}