扩展中的密封包装
您可以选择密封扩展 JAR 文件中的软件包,以作为其他安全措施。如果封装是密封的,则该封装中定义的所有类都必须源自单个 JAR 文件。
无需密封,“敌对的”程序可以创建一个类并将其定义为您的扩展程序包之一的成员。然后,该恶意软件将可以自由访问扩展程序包中受程序包保护的成员。
密封扩展中的软件包与密封任何 JAR 打包的类没有什么不同。要密封扩展程序包,必须将Sealed
Headers 添加到包含扩展程序的 JAR 文件的清单中。您可以通过将Sealed
Headers 与软件包的Name
Headers 相关联来密封各个软件包。没有与 Files 中的单个软件包关联的Sealed
Headers 表示已密封所有软件包。此类“全局” Sealed
Headers 被与各个软件包关联的任何Sealed
Headers 覆盖。与Sealed
Headers 关联的值为true
或false
。
Examples
让我们看一些示例清单文件。对于这些示例,假设 JAR 文件包含以下软件包:
com/myCompany/package_1/
com/myCompany/package_2/
com/myCompany/package_3/
com/myCompany/package_4/
假设您想密封所有包装。您可以这样简单地将清单级别的Sealed
Headers 添加到清单中:
Manifest-Version: 1.0
Sealed: true
具有此清单的任何 JAR 文件中的所有软件包都将被密封。
如果您只想密封com\.myCompany\.package_3
,则可以使用以下清单进行密封:
Manifest-Version: 1.0
Name: com/myCompany/package_3/
Sealed: true
在此示例中,唯一的Sealed
Headers 是与程序包com\.myCompany\.package_3
的Name
Headers 相关联的 Headers,因此只有该程序包是密封的。 (Sealed
Headers 与Name
Headers 相关联,因为它们之间没有空行.)
对于最后一个示例,假设您想密封除* com\.myCompany\.package_2
以外的所有软件包。您可以使用如下清单来实现:
Manifest-Version: 1.0
Sealed: true
Name: com/myCompany/package_2/
Sealed: false
在此示例中,Files 级别的Sealed: true
Headers 指示 JAR 文件中的所有软件包都将被密封。但是,清单还具有一个与com\.myCompany\.package_2
包关联的Sealed: false
头,并且该头覆盖了该包的归档级密封。因此,此清单将导致除com\.myCompany\.package_2
以外的所有包装均密封。