【问题标题】:External plugin framework to my JAVA application我的 JAVA 应用程序的外部插件框架
【发布时间】:2018-01-17 01:56:16
【问题描述】:

我使用 SPRING 和 MongoDB 构建了一个大型 JAVA Web 应用程序, 在某些情况下,我希望允许我的用户上传他们自己的代码,并且应用程序稍后会在必要时运行它。 我把这个操作称为“插件框架”,插件当然是用户的代码,我现在更喜欢在 NodeJS 中。

是否有任何推荐/已知的架构用于此目的? 我读过pf4jsenecajs,但它们与我的需求完全不同。

谢谢!

【问题讨论】:

  • 如果您正在构建一种“代码编译器”或“代码验证”,那么您应该避免使用像 pf4j 这样的框架,因为它提供了称为“模块化应用程序/微内核”的“架构”模型,它是替代品之一对于 OSGi 框架 [例如。 Apache Felix] 但我推断 [查看标签] 您为应用程序构建体系结构,然后使用 spring。也许你应该看看微服务架构而不是模块化应用程序。

标签: java node.js web-applications architecture pf4j


【解决方案1】:

您对节点上运行的代码失去了完全控制。上传的代码可以访问网络、文件、数据库,随便你。这不是一个好计划。

我建议使用 Java 中的嵌入式 JS 模块,称为 rhino。在这里,您定义代码可以访问的环境。

您可以在此处找到使用 Java 脚本的示例 http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/index.html for jdk7、Javadocs https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine.html 以及此处有关 Java8 更改的一些信息 http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html

更新:

在下面的评论中,您声明如果代码在另一台服务器上运行,您认为自己是安全的。其实问题还是一样的。只是它不会访问您的应用程序的服务器,而是 JS 代码服务器。

我的建议成立。使用内置的 Javascript 引擎(Rhino 或 Nashorn)实现 JS 执行服务,并将运行的 JS 限制在沙箱中,您可以通过精心实现的 env-access 方法控制脚本的开箱即用范围。上手其实很简单,不比在node之上实现一个远程javascript实现引擎复杂...

【讨论】:

  • 实际上我的 JS 代码将在完全独立的服务器上执行,不会访问或影响我的代码。因此,我更喜欢它脱离我的核心项目,但能够执行这些 JS 文件并使用它们的输出
  • 查看我的更新文章。从安全的角度来看,我认为您的设计存在缺陷。
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 2011-10-23
  • 1970-01-01
  • 2012-12-30
  • 2011-10-08
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多