当前位置: 首页 > 面试题库 >

防弹的Groovy脚本嵌入

管杜吟
2023-03-14
问题内容

我正在开发可能由用户提供的Groovy脚本扩展的服务器应用程序。显然,我想确保这些脚本在非常紧凑的沙箱中运行,在这些沙箱中它们不会破坏核心应用程序代码或消耗过多资源以使服务器超载。

我研究了各种可能性,最终的解决方案可能是这些的组合:

  • 在受严格限制的安全管理器中运行脚本 。该脚本在没有权限的SecurityManager中运行。必须声明其他权限(例如Android)。

  • 启动一个新的JVM 。在Runtime.exec周围创建一个ScriptProcess包装器,并使用安全管理器,有限的堆等生成一个新的JVM。由于我们启动了一个成熟的进程,因此我们可能获得更多监控不良行为的控制权?资源的成本不过是可怕的……一种替代方法是在这里使用Ant,但是它具有可伸缩性吗?

  • Java Monitor API 在Java 6中,有一个具有监视功能的软件包。我们可以监视线程,还可以检测无限循环和内存消耗。有人用过吗?

这就是我今天想到的。确保这些脚本正确运行并保持一定的可伸缩性和性能的最佳方法是什么?


问题答案:

另一种可能性是在运行嵌入式脚本的GroovyShell上使用Groovy 1.8编译定制器。您可以预先导入类和方法,限制对Groovy
AST的使用,并预先应用AST转换,例如@ ThreadInterrupt,@
TimedInterrupt或@ConditionalInterrupt。详细信息在:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process



 类似资料:
  • 我对Groovy很陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到了这篇文章。但是由于环境限制,我不能使用GroovyClassLoader之类的函数或导入任何库/框架。我唯一的可能性是使用评估方法。 我试过这个: 主脚本(评估不会抛出任何错误) Csvreader脚本 但是,我需要通过evaluate调用传递参数(并将方法移到类之外),或者需要创建类的实例。不幸的

  • 问题内容: 我是Jenkins中使用的Groovy脚本的新手。我的问题是,我们如何根据作业名称和内部版本号获取作业的时间戳? 示例 :我想获取“ MyDeployJob”(JobName)的时间戳,并获取BuildNumber-105的时间戳。 我尝试使用方法方法,但无法正常工作。另外,我发现环境变量具有时间戳,但是我无法弄清楚如何使用Groovy Script获取细节。请帮助。 提前致谢。 问题

  • 我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g

  • 我有一个基本的Groovy脚本,我希望尽可能简单地创建日志。我希望消息转到标准输出,以及一个日志文件,日志文件中的每个条目都有一个时间戳。 我不能使用@Log符号,因为它是一个脚本,我没有要注入的类。否则我认为这将是理想的。

  • 在Groovy脚本中到处搜索log4j日志记录到文件的工作示例。 没有显式类(它只是一个脚本)。没有圣杯。不到控制台。。。到文件。 只是一个带有log4j的普通groovy脚本。 log4j是最适合这一点的(groovy)还是其他日志库更好? 有人能给我举个例子或演示一下这是如何做到的吗?我设法把它送到控制台,但没有归档。 如果log4j配置也在config.groovy文件中,那就太好了,因为我

  • 当我尝试在soapUI测试步骤中解析响应时,收到了以下异常。也尝试了getXMLHolder方法。还是没运气。 答复如下