文档

Java™ 教程
隐藏目录
封装扩展中的包
教程:扩展机制
课程:使扩展安全

在扩展中封装包

你可以选择将扩展JAR文件中的包封装起来,作为一种额外的安全措施。如果一个包被封装了,那么在该包中定义的所有类必须来源于同一个JAR文件。

如果没有封装,一个“敌对的”程序可以创建一个类,并将其定义为你的扩展包的成员。这个敌对软件将可以自由访问你的扩展包的包级私有成员。

在扩展中封装包与封装任何JAR包中的类没有区别。要封装你的扩展包,你必须在包含扩展的JAR文件的清单中添加Sealed头。你可以通过将Sealed头与包的Name头关联来封装单个包。一个与存档中的单个包关联的Sealed头表示所有包都被封装。与单个包关联的Sealed头会覆盖全局Sealed头。与Sealed头关联的值要么是true,要么是false

示例

让我们看一些示例清单文件。对于这些示例,假设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之外的所有包都被封装。


上一页: 设置扩展的权限
下一页: 结束