manifest.mf_manifest.mf文件编辑_manifest.mf websphete(4)

电脑杂谈  发布时间:2017-04-17 15:01:30  来源:网络整理

要密封包,需要在JAR的manifest文件中为包添加一个Name头,然后加上为“true”的Sealed头。与可执行的JAR一样,可以在创建JAR时,通过指定一个具有适当头元素的manifest文件密封一个JAR,如下所示:

Name头标识出包的相对路径名。它以一个“/”结束以与文件名区别。在Name头后面第一个空行之前的所有头都作用于在Name头中指定的文件或者包。在上述例子中,因为Sealed头出现在Name头后并且中间没有空行,所以Sealed头将被解释为只应用到包com/samplePackage上。

如果试图从密封包所在的JAR文件以外的其他地方装载密封包中的一个类,那么JVM将抛出一个SecurityException。

扩展打包

扩展为Java平台增加了功能,在JAR文件式中已经加入了扩展机制。扩展机制使得JAR文件可以通过manifest文件中的Class-Path头指定所需要的其他JAR文件。

假设extension1.jar和extension2.jar是同一个目录中的两个JAR文件,extension1.jar的manifest文件包含以下头:

这个头表明extension2.jar中的类是extension1.jar中的类的扩展类。extension1.jar中的类可以调用extension2.jar中的类,并且不要求extension2.jar处在类路径中。

在装载使用扩展机制的JAR时,JVM会高效而自动地将在Class-Path头中引用的JAR添加到类路径中。不过,扩展JAR路径被解释为相对路径,所以一般来说,扩展JAR必须存储在引用它的JAR所在的同一目录中。

例如,假设类ExtensionClient引用了类ExtensionDemo ,它捆绑在一个名为ExtensionClient.jar的JAR文件中,而类ExtensionDemo则捆绑在ExtensionDemo.jar中。为了使ExtensionDemo.jar可以成为扩展,必须将ExtensionDemo.jar列在ExtensionClient.jar的manifest的Class-Path头中,如下所示:

在这个manifest中Class-Path头的是没有指定路径的ExtensionDemo.jar,表明ExtensionDemo.jar与ExtensionClient JAR文件处在同一目录中。

JAR文件中的安全性

JAR文件可以用jarsigner工具或者直接通过java.security API签名。一个签名的JAR文件与原来的JAR文件完全相同,只是更新了它的manifest,并在META-INF目录中增加了两个文件,一个签名文件和一个签名块文件。

JAR文件是用一个存储在Keystore中的证书签名的。存储在keystore中的证书有密码保护,必须向jarsigner工具提供这个密码才能对JAR文件签名。

图1. Keystore

JAR的每一位签名者都由在JAR文件的META-INF目录中的一个具有.SF扩展名的签名文件表示。这个文件的式类于manifest文件--一组RFC-822头。如下所示,它的组成包括一个主要部分,它包括了由签名者提供的信息、但是不特别针对任何特定的JAR文件项,还有一系列的单独的项,这些项也必须包含在menifest文件中。在验证一个签名的JAR时,将签名文件的摘要与对JAR文件中的相应项计算的摘要进行比较。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-41868-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...