# 在扩展中密封包

> 原文： [https://docs.oracle.com/javase/tutorial/ext/security/sealing.html](https://docs.oracle.com/javase/tutorial/ext/security/sealing.html)

您可以选择 _ 密封扩展 JAR 文件中的 _ 包作为额外的安全措施。如果密封包，则该包中定义的所有类必须来自单个 JAR 文件。

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

密封包的扩展与密封任何 JAR 包装的类没有什么不同。要密封扩展包，必须将`密封`标头添加到包含扩展名的 JAR 文件的清单中。您可以通过将`密封`标头与软件包的`名称`标头相关联来密封单个软件包。与存档中的单个包无关的`密封`标头表示所有包都已密封。这种“全局”`密封`标头被与各个包相关联的任何`密封`标头覆盖。与`密封`标题相关的值是 `true` 或 `false` 。

## 例子

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

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

```

假设您要密封所有包裹。您可以通过简单地将清单级`密封`标头添加到清单中来实现，如下所示：

```
Manifest-Version: 1.0
Sealed: true

```

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

如果你只想密封 `com.myCompany.package_3` ，你可以使用这个清单：

```
Manifest-Version: 1.0

Name: com/myCompany/package_3/
Sealed: true

```

在这个例子中，唯一的`密封`标题是与包 `com.myCompany.package_3` 的`名称`标题相关联的标题，因此只有该包被密封。 （`密封`标题与`名称`标题相关联，因为它们之间没有空行。）

最后一个例子，假设您要密封除 `com.myCompany.package_2` 之外的所有包 _。你可以使用这样的清单来完成它：_

```
Manifest-Version: 1.0
Sealed: true

Name: com/myCompany/package_2/
Sealed: false

```

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