我正在设计一个能够执行用户上传的自定义代码或预编译类的java Web应用程序,主要集中在数据集的简单验证上。 必须将自定义类约束到预定义的接口,并且只有一些库和类必须可用于自定义类。
我的第一个解决方案是使用能够从文件系统中定义的目录加载.jar文件的自定义类加载器。这种方法似乎有效,但我担心这个解决方案的安全性和兼容性。
是否可以限制自定义类可以导入的类并在沙箱中运行代码以避免打开文件或套接字等操作?
何时卸载已加载的类?
应用Weblogic等服务器对使用自定义类加载器有一些限制吗?
我已经评估过像OSGi Bundles这样的其他解决方案,但它看起来非常复杂,并且在一些应用程序服务器中支持有限,我也不确定OSGi是否适合这种特定用途。嵌入式脚本语言如Groovy或Javascript被丢弃,因为项目所有者希望预编译并使用Java编写自定义代码。
你会为这个问题推荐什么?
答案 0 :(得分:0)
OSGi非常适合希望接受外部代码(插件)的应用程序。您提到的所有要求(预定义接口,加载jar,多个类加载器)都包含在OSGi服务和捆绑管理中。可以安装,启动,停止,卸载捆绑包等,包括在运行时。
Web应用程序服务器中的OSGi支持不是really that limited。你甚至可以考虑embedding一个OSGi框架。
安全方面,您需要围绕security managers的解决方案。