1

我正在设计一个能够执行用户上传的自定义代码或预编译类的 java web 应用程序,主要专注于数据集的简单验证。自定义类必须受限于预定义的接口,并且只有一些库和类必须对自定义类可用。

我的第一个解决方案是使用能够从文件系统中定义的目录加载 .jar 文件的自定义类加载器。这种方法似乎有效,但我担心这个解决方案的安全性和兼容性。

是否可以限制自定义类可以导入的类并在沙箱中运行代码以避免一些操作,如打开文件或套接字?

加载的类什么时候会被卸载?

像 Weblogic 这样的应用服务器对使用自定义类加载器有一些限制吗?

我评估了另一种解决方案,如 OSGi Bundles,但它看起来非常复杂,并且在某些应用程序服务器中支持有限,而且我不确定 OSGi 是否适合这种特定用途的技术。像 Groovy 或 Javascript 这样的嵌入式脚本语言被丢弃,因为项目所有者希望自定义代码预编译并用 Java 编写。

你会为这个问题推荐什么?

4

1 回答 1

0

OSGi 非常适合希望接受外部代码(插件)的应用程序。您提到的所有需求(预定义接口、加载 jar、多个类加载器)都包含在 OSGi 服务和包管理中。可以安装、启动、停止、卸载等捆绑包,包括在运行时。

Web 应用程序服务器中的 OSGi 支持并没有那么有限。您甚至可以考虑嵌入一个 OSGi 框架。

安全方面,您将需要围绕安全管理器的解决方案。

于 2013-11-04T02:06:39.447 回答