我使用SPRING& amp;创建了一个大型JAVA Web应用程序。 MongoDB的, 在某些情况下,我希望允许我的用户上传他们自己的代码,应用程序稍后会在必要时运行。 我打电话给这个操作"插件框架",插件当然是用户的代码,我现在更喜欢在NodeJS中。
为此目的,有任何推荐/已知的架构吗? 我已经了解了pf4j和senecajs,但它们与我的需求完全不同。
谢谢!
答案 0 :(得分:0)
您无法完全控制在节点上运行的代码。上传的代码可以访问网络,文件,数据库,您可以为其命名。这不是一个好计划。
我建议使用Java中的嵌入式JS模块,称为rhino。在这里,您可以定义代码可以访问的环境。
您可以在此处找到使用Java编写脚本的示例http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/index.html以获取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方法控制脚本的开箱即用。它实际上很容易上手,并不比在节点上实现远程javascript实现引擎复杂......