首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Scala中屏蔽JSON测试中的密码等敏感字段?

如何在Scala中屏蔽JSON测试中的密码等敏感字段?
EN

Stack Overflow用户
提问于 2019-04-11 04:37:07
回答 1查看 852关注 0票数 0

因此,这感觉像是一个面试问题,但它不是。在您将其标记为重复之前,请知道我已经查看了其他答案: 1.没有scala解决方案,2.我的案例需要一种方法来屏蔽多个匹配的键。

我有一个def,它使我所有的http请求。在我发送请求之后,我记录请求和响应。因为这些请求有一个JSON主体,而JSON主体可能有也可能没有像这样的敏感字段:

代码语言:javascript
复制
challengeAnswer
currPassword
password
answer
oldPassword

我想创建一个通用的JSON扫描器,它可以深度扫描给定JSON对象的键,并在值不敏感地匹配这些正则表达式的情况下掩蔽值:

代码语言:javascript
复制
.*answer.*
.*password.*

请求正文示例:

代码语言:javascript
复制
{
    "resetPassQuestion1": "I pity the ...?",
    "resetPassAnswer1": "Foo",
    "resetPassQuestion2": "Let's grab a pint at the ...?",
    "resetPassAnswer2": "Bar",
    "firstname": "John",
    "lastname": "Doe",
    "email": "john.doe@example.com",
    "loginId": "jdoe666",
    "password": "Secret1"
}

我需要在本例中使用5个星号来掩蔽Foo、Bar和Secret1,例如,当我在日志中打印时,它将打印:

代码语言:javascript
复制
{
    "resetPassQuestion1": "I pity the ...?",
    "resetPassAnswer1": "*****",
    "resetPassQuestion2": "Let's grab a pint at the ...?",
    "resetPassAnswer2": "*****",
    "firstname": "John",
    "lastname": "Doe",
    "email": "john.doe@example.com",
    "loginId": "jdoe666",
    "password": "*****"
}

我找不到不敏感的大小写匹配的例子。用易于阅读的代码来解决这个问题的一个很好的清晰方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-04-13 04:41:17

所以我用LiftJson的变换解决了这个问题。

代码语言:javascript
复制
import net.liftweb.json.JsonParser
import net.liftweb.json.Printer.compact
import net.liftweb.json.JsonAST._

private def maskPasswords(jsonStr: String): String = {
    Try(JsonParser.parse(jsonStr)) match {
        case Success(json) => {
            compact(
                render(
                    json.transform {
                        case JField("password",_) => JString("*****")
                        case JField("oldPassword",_) => JString("*****")
                        case JField("resetPassAnswer2",_) => JString("*****")
                        case JField("resetPassAnswer1",_) => JString("*****")
                    }
                )
            )
        }
        case _ => "**** JsonParsing Failed! **** Masking Everything *****"
    }
}

这并不完美,因为我想要屏蔽的每个新字段,我必须在这里添加新的行,但它现在对我来说已经足够好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55620972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档