我喜欢用于配置的“代码即数据”的想法,因为您从案例类中获得的验证与您想要对配置文件进行的验证相同。Twitter 编写了一个很好的 Eval 实用程序,使这变得容易(https://github.com/twitter/util)。我想允许用户将配置文件上传到远程服务。这开启了针对我的远程服务注入代码的可能性。
例如,如果我有以下配置案例类:
case class MyConfig(param1: String)
我希望用户能够上传包含命令的文件:
MyConfig(param1 = "My Param Value")
...但不是包含命令的文件:
MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})
有没有办法拦截编译以确保没有调用任何函数?