You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Groovy元编程阻止特定字符串变量被打印?

通过String.metaClass实现敏感字符串打印脱敏

要实现敏感字符串打印时被替换为*****,我们可以直接修改String类的元类,重写其toString方法——毕竟println本质上会调用对象的toString方法输出内容。

单敏感值场景实现

// 指定需要脱敏的敏感字符串
def targetSensitiveStr = "sensitiveValue"

// 重写String的toString方法
String.metaClass.toString = {
    // 判断当前字符串是否为敏感值,是则返回*****,否则返回原内容
    delegate == targetSensitiveStr ? "*****" : delegate
}

// 原业务代码
def sen = "sensitiveValue"
def nonSen = "nonSensitiveValue"
println sen
println nonSen

运行这段代码后,输出就会符合预期:

*****
nonSensitiveValue

多敏感值场景扩展

如果需要同时处理多个敏感字符串,可以把敏感值放到集合里,修改判断逻辑即可:

// 维护敏感字符串集合
def sensitiveList = ["sensitiveValue", "userPassword", "apiKey"]

String.metaClass.toString = {
    delegate in sensitiveList ? "*****" : delegate
}

def sen = "sensitiveValue"
def nonSen = "nonSensitiveValue"
def secretKey = "apiKey"
println sen
println nonSen
println secretKey

运行后输出:

*****
nonSensitiveValue
*****

注意事项

这种元类修改是全局生效的,意味着当前代码环境中所有String实例的toString都会遵循这个规则。如果只是需要局部脱敏,可能需要结合其他方式,但完全符合题目要求的String.metaClass实现方式。

内容的提问来源于stack exchange,提问作者try.aaam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:20:55