扩展中的密封包装

您可以选择密封扩展 JAR 文件中的软件包,以作为其他安全措施。如果封装是密封的,则该封装中定义的所有类都必须源自单个 JAR 文件。

无需密封,“敌对的”程序可以创建一个类并将其定义为您的扩展程序包之一的成员。然后,该恶意软件将可以自由访问扩展程序包中受程序包保护的成员。

密封扩展中的软件包与密封任何 JAR 打包的类没有什么不同。要密封扩展程序包,必须将SealedHeaders 添加到包含扩展程序的 JAR 文件的清单中。您可以通过将SealedHeaders 与软件包的NameHeaders 相关联来密封各个软件包。没有与 Files 中的单个软件包关联的SealedHeaders 表示已密封所有软件包。此类“全局” SealedHeaders 被与各个软件包关联的任何SealedHeaders 覆盖。与SealedHeaders 关联的值为truefalse

Examples

让我们看一些示例清单文件。对于这些示例,假设 JAR 文件包含以下软件包:

com/myCompany/package_1/
com/myCompany/package_2/
com/myCompany/package_3/
com/myCompany/package_4/

假设您想密封所有包装。您可以这样简单地将清单级别的SealedHeaders 添加到清单中:

Manifest-Version: 1.0
Sealed: true

具有此清单的任何 JAR 文件中的所有软件包都将被密封。

如果您只想密封com\.myCompany\.package_3,则可以使用以下清单进行密封:

Manifest-Version: 1.0

Name: com/myCompany/package_3/
Sealed: true

在此示例中,唯一的SealedHeaders 是与程序包com\.myCompany\.package_3NameHeaders 相关联的 Headers,因此只有该程序包是密封的。 (SealedHeaders 与NameHeaders 相关联,因为它们之间没有空行.)

对于最后一个示例,假设您想密封除* com\.myCompany\.package_2以外的所有软件包。您可以使用如下清单来实现:

Manifest-Version: 1.0
Sealed: true

Name: com/myCompany/package_2/
Sealed: false

在此示例中,Files 级别的Sealed: trueHeaders 指示 JAR 文件中的所有软件包都将被密封。但是,清单还具有一个与com\.myCompany\.package_2包关联的Sealed: false头,并且该头覆盖了该包的归档级密封。因此,此清单将导致除com\.myCompany\.package_2以外的所有包装均密封。