文档

Java™ 教程-Java Tutorials 中文版
在扩展中密封包
Trail: The Extension Mechanism
Lesson: Making Extensions Secure

在扩展中密封包

你可以选择 seal (密封) 扩展 JAR 文件中的包作为附加安全措施。如果密封包,则该包中定义的所有类必须来自单个 JAR 文件。

如果没有密封,“恶意”程序可以创建一个类并将其定义为你的一个扩展包的成员。然后恶意软件可以免费访问扩展包的受包保护的成员。

密封扩展中的与密封任何 JAR 包装的类没有什么不同。要密封扩展包,必须将 Sealed 头添加到包含扩展的 JAR 文件的清单中。你可以通过将 Sealed 头与软件包的 Name 头相关联来密封单个软件包。与归档中的单个包无关的 Sealed 头表示所有包都已密封。这样的“全局”Sealed 头被与各个包相关联的任何 Sealed 头覆盖。与 Sealed 头关联的值为 truefalse

例子

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

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

假设你要密封所有包裹。你可以通过简单地将清单级 Sealed 头添加到清单中来执行此操作,如下所示:

Manifest-Version: 1.0
Sealed: true

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

如果你只想密封 com.myCompany.package_3,可以使用此清单进行密封:

Manifest-Version: 1.0

Name: com/myCompany/package_3/
Sealed: true

在此示例中,唯一的 Sealed 头是与包 com.myCompany.package_3Name 头关联的,因此只有该软件包被密封。(Sealed 头与 Name 头关联,因为它们之间没有空行。)

最后一个例子,假设你要密封所有包 除了 com.myCompany.package_2。你可以使用这样的清单来完成它:

Manifest-Version: 1.0
Sealed: true

Name: com/myCompany/package_2/
Sealed: false

在此示例中,归档级 Sealed: true 头指示要密封 JAR 文件中的所有包。但是,清单还有一个与 com.myCompany.package_2 包相关联的 Sealed: false 头,该头会覆盖该软件包的存档级密封。因此,此清单将导致除了 com.myCompany.package_2 之外,密封所有包。


Previous page: Setting Privileges for Extensions
Next page: End of Trail