我有一个Java应用程序,我想让它可扩展。要创建扩展,我们公司内的开发人员将编写一个实现特定接口的Java类。他们也可能希望编写相关的帮助程序类。我想在不中断的情况下将这些扩展加载到应用程序中。

我想限制这个类可以对以下内容做什么:

  1. 调用应用程序API中的方法(这将是构造函数的参数)
  2. 在同一个包中创建其他对象的实例(因此扩展类的作者可以使用其他类来完成工作)。
  3. 调用类时,传入的API对象已经有<!> quot; customer <!>;定义并存储为成员变量。它将使用它来限制通过API访问该客户的数据。

    我不希望这些类执行诸如访问数据库,写入磁盘或以其他方式处理等事情。这主要是依赖管理和封装的努力,因为同一个开发人员团队将有权编写这两个扩展和核心系统。

    这有什么模式吗?我是在正确的轨道上吗?

有帮助吗?

解决方案

你不需要寻找异国情调。处理此场景是Java安全体系结构的基本特性。

每个类都有一个<!> quot; codebase <!> quot;,它的加载位置。因此,如果您将每个扩展包装在单独的JAR中(或在单独的目录中展开),您将能够定制授予该代码库的权限。

在您的情况下,听起来更简单。如果我理解正确,所有扩展将具有相同的权限,这些权限小于父应用程序的权限。因此,他们都可以共享代码库。

以下是政策文件的示例:

grant codeBase "file:/path/to/app/lib/*" {
  permission java.io.FilePermission "/path/to/app/-", "read";
  permission java.io.FilePermission "/path/to/app/data/-", "read,write,delete";
};

grant codeBase "file:/path/to/app/ext/*" {
  permission java.util.PropertyPermission "java.io.tmpdir", "read";
  permission java.io.FilePermission "${java.io.tmpdir}/myapp/-", "read,write,delete";
};

这个简单的例子应该适用于任何版本的Java 。较新版本具有扩展策略语法以授予权限对JAAS认证的主题。

其他提示

我不知道实现细节,但看起来你的想法接近于 Apache Tomcat 服务器已经做到了。 Tomcat中的各个Web应用程序保持独立,具有不同的单个类加载器。也许值得一看那里的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top