【问题标题】:How to redact/mask a JSON response using Regular Expression?如何使用正则表达式编辑/屏蔽 JSON 响应?
【发布时间】:2019-06-23 14:25:06
【问题描述】:

假设您想在 JSON 响应中屏蔽密码。

 { 
    "username":"test",
    "password":1234
}

我们如何使用正则表达式来实现这一点。

输出应该是这样的

{
    "username":"********",
    "password": ********
}

【问题讨论】:

  • 只需使用 json 解析器。正则表达式不是正确的工具。另外:输出不是有效的 json。

标签: java json regex masking redaction


【解决方案1】:

在花了几个小时之后,找到了这个解决方案。

private static final String REGEX_FILTER_KEY = "[:]+((?=\\[)\\[[^]]*\\]|(?=\\{)\\{[^\\}]*\\}|\\\"[^\"]*\\\"|(\\d+(\\.\\d+)?))";

List<String> redactKeys = Collections.unmodifiableList(Arrays.asList("username", "password", "userId"));


 private String redact(@NonNull String responseString) {
        for (String key : redactingKeys) {
            Matcher matcher = Pattern.compile(String.format("\"%s\"%s", key, REGEX_FILTER_KEY)).matcher(responseString);
            if (matcher.find() && matcher.group(1) != null) {
                responseString = responseString.replace(matcher.group(1), "**********");
            }
        }
        return responseString;
    }

【讨论】:

  • 有几个问题:您替换了整个 json 中任何出现的要编辑的值(例如 test 用户名)。因此,如果有人选择"username" 的密码,此代码会破坏您的 json。为什么正则表达式如此复杂?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多