我正在设计一个能够执行用户上传的自定义代码或预编译类的 java web 应用程序,主要专注于数据集的简单验证。自定义类必须受限于预定义的接口,并且只有一些库和类必须对自定义类可用。
我的第一个解决方案是使用能够从文件系统中定义的目录加载 .jar 文件的自定义类加载器。这种方法似乎有效,但我担心这个解决方案的安全性和兼容性。
是否可以限制自定义类可以导入的类并在沙箱中运行代码以避免一些操作,如打开文件或套接字?
加载的类什么时候会被卸载?
像 Weblogic 这样的应用服务器对使用自定义类加载器有一些限制吗?
我评估了另一种解决方案,如 OSGi Bundles,但它看起来非常复杂,并且在某些应用程序服务器中支持有限,而且我不确定 OSGi 是否适合这种特定用途的技术。像 Groovy 或 Javascript 这样的嵌入式脚本语言被丢弃,因为项目所有者希望自定义代码预编译并用 Java 编写。
你会为这个问题推荐什么?