查看策略文件效果

现在,您已将所需的策略条目添加到examplepolicy策略文件中,使用安全 管理 器执行GetProps应用程序时,您应该能够读取指定的属性,如下图所示。

GetProps 应用程序现在可以读取指定的属性

每当您运行 applet 或带有安全 管理 器的应用程序时,默认情况下加载和使用的策略文件就是在“安全属性文件” **中指定的文件,该文件位于以下目录之一:

  • Windowsjava.home\lib\security\java.security

  • UNIXjava.home/lib/security/java.security

注意: java\.home环境变量为 JRE 的安装目录命名。

策略文件位置被指定为名称形式为以下属性的值:

policy.url.n

其中变量n表示数字。在采用以下格式的行中指定每个属性值:

policy.url.n=URL

其中 URL 是 URL 规范。例如,默认策略文件(有时分别称为系统策略文件和用户策略文件)在安全属性文件中定义为

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

Note:

在安全属性文件中使用符号${propName}是指定属性值的一种方式。因此,${java.home}将在运行时被"java.home"属性的实际值替换,该实际值指示 JRE 的安装目录,而${user.home}将被"user.home"属性的值替换,例如C:\Windows

除了安全属性文件中指定的策略文件以外,还有两种可能的方式可以将examplepolicy文件视为整体策略的一部分。您可以在传递给运行时系统的属性中指定附加策略文件(如Approach 1中所述),也可以在安全属性文件中添加一行以指定附加策略文件,如Approach 2中所述。

Approach 1

您可以使用-Djava.security.policy解释程序命令行参数来指定除安全属性文件中指定的策略文件之外还应使用的策略文件。

确保您位于包含GetProps.classexamplepolicy的目录中。然后,您可以运行GetProps应用程序并将examplepolicy策略文件传递给解释器,方法是在一行上键入以下命令:

java -Djava.security.manager -Djava.security.policy=examplepolicy GetProps

注意: 请记住,使用-Djava.security.manager才能与安全 管理 器一起运行应用程序,如请参阅如何限制应用程序步骤所示。

该程序报告"user.home""java.home"属性的值。

如果应用程序仍然报告错误,则策略文件中有问题。使用策略工具来检查您刚在设置策略文件以授予所需的权限步骤中创建的策略条目。

Approach 2

您可以在安全属性文件的policy.url.n属性中指定许多 URL,然后将加载所有指定的策略文件。因此,让java解释程序考虑examplepolicy文件的策略条 Object 一种方法是在安全属性文件中添加一个指定该策略文件的条目。

Important:

如果您正在运行自己的 JDK 副本,则可以轻松地编辑安全属性文件。如果您正在运行与其他用户共享的版本,则只有在您具有对该文件的写权限或要求系统 管理 员在适当的时候修改该文件的情况下,您才能修改该系统范围的安全属性文件。但是,对于本教程测试,您可能不适合对系统范围的策略文件进行修改。我们建议您阅读以下内容以了解其完成方式,或者安装自己的专用 JDK 版本以用于本教程。

要修改安全属性文件,请在适合于编辑 ASCII 文本文件的编辑器中将其打开。然后在包含policy.url.2的行之后添加以下行:如果您使用的是 Windows 系统,请添加

policy.url.3=file:/C:/Test/examplepolicy

如果您使用的是 UNIX 系统,请添加

policy.url.3=file:${user.home}/test/examplepolicy

在 UNIX 系统上,您也可以显式指定主目录,如下所示:

policy.url.3=file:/home/jones/test/examplepolicy

运行应用程序

现在,您应该能够成功运行以下内容。

java -Djava.security.manager GetProps

与方法 1 一样,如果仍然遇到安全异常,则策略文件中有问题。使用策略工具来检查您刚在设置策略文件以授予所需的权限步骤中创建的策略条目。然后修复所有错别字或其他错误。


Important:

除非您正在运行本教程类,否则不需要包括examplepolicy文件。要排除此文件,请打开安全属性文件并删除刚添加的行。

在 continue 之前,您可能希望删除刚添加到安全属性文件中的行(或将其 注解 掉),因为在不运行教程时,您可能不希望包含examplepolicy文件。