Scala 存储和检索敏感常数和非敏感常数的正确方法是什么?

Scala 存储和检索敏感常数和非敏感常数的正确方法是什么?,scala,Scala,我的目标是了解如何在代码中包含敏感常量/机密(例如api令牌)和非敏感常量(例如api路由) 敏感常数的示例: val apiToken = "Hushhhh!" val happyUsersEndpoint = "https://happy.foo.io/v1/users" 非敏感常数的示例: val apiToken = "Hushhhh!" val happyUsersEndpoint = "https://hap

我的目标是了解如何在代码中包含敏感常量/机密(例如api令牌)和非敏感常量(例如api路由)

敏感常数的示例:

val apiToken = "Hushhhh!"
val happyUsersEndpoint = "https://happy.foo.io/v1/users"
非敏感常数的示例:

val apiToken = "Hushhhh!"
val happyUsersEndpoint = "https://happy.foo.io/v1/users"
我的问题是:

  • 我应该在文件夹结构的哪个部分存储非敏感常量
  • 有没有一种安全的方法在我的代码中存储敏感常量?如果不是,在我的代码中从外部引用它们的正确方式是什么

  • 据我所知,Java ish代码中有一些方法可以做到这一点,但我主要是寻找适合Scala代码的方法(如果可能)。

    它不应该出现在源代码和VCS repo中

    它应该是部署/操作过程的一部分

    您可以使用某种配置或从环境变量中检索它。哪个更好取决于您的堆栈。是码头工人吗?这是一个剧本还是来自typelevel stack

    对于每种情况,都有不同的适当方法。例如:

    • 对于播放,您可以使用HOCON格式的播放配置文件
    • 在typelevel中,您有
    • 对于docker安装,最好使用env
    • 如果您有一个简单的零依赖控制台应用程序-我建议添加带有所需属性的命令行参数
    • 对于没有play、cats和docker的简单应用程序,只需选择一个轻量级的简单库即可

    它不应出现在源代码和VCS回购协议中

    它应该是部署/操作过程的一部分

    您可以使用某种配置或从环境变量中检索它。哪个更好取决于您的堆栈。是码头工人吗?这是一个剧本还是来自typelevel stack

    对于每种情况,都有不同的适当方法。例如:

    • 对于播放,您可以使用HOCON格式的播放配置文件
    • 在typelevel中,您有
    • 对于docker安装,最好使用env
    • 如果您有一个简单的零依赖控制台应用程序-我建议添加带有所需属性的命令行参数
    • 对于没有play、cats和docker的简单应用程序,只需选择一个轻量级的简单库即可

    这实际上是一个设计问题,适用于任何应用程序,而不是Scala。你可以在互联网上找到很多资源,解释如何管理秘密的技术。此外,正如Artem所说,这非常依赖于您的技术堆栈,特别是操作堆栈。这实际上是一个对任何应用程序都通用的设计问题,而不是Scala。你可以在互联网上找到很多资源,解释如何管理秘密的技术。此外,正如Artem所说,这非常依赖于您的技术堆栈,特别是操作堆栈。