文档

Java™ 教程
隐藏目录
查看策略文件的效果
路径: Java SE 中的安全特性
课程: 快速了解应用程序控制

查看策略文件的影响

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

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

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

注意:  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

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

有两种可能的方式可以将examplepolicy文件视为整体策略的一部分,除了在安全属性文件中指定的策略文件外。你可以使用传递给运行时系统的属性来指定附加的策略文件,如方法1中所述,或者在安全属性文件中添加一行来指定附加的策略文件,如方法2所讨论的那样。

方法1

你可以使用-Djava.security.policy解释器命令行参数来指定一个策略文件,该文件应该被用于除了在安全属性文件中指定的策略文件之外。

确保你在包含 GetProps.classexamplepolicy 的目录中。然后你可以运行 GetProps 应用程序,并通过以下命令一行输入 examplepolicy 策略文件来将其传递给解释器:

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

注意:记住需要使用 -Djava.security.manager 来运行带有安全管理器的应用程序,如 查看如何限制应用程序 步骤中所示。

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

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

方法2

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


重要:如果您正在运行自己的 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一样,如果仍然出现安全异常,则策略文件中存在问题。请使用策略工具检查在 设置策略文件以授予所需权限 步骤中创建的策略条目。然后修复任何拼写错误或其他错误。



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

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

 


上一页: 保存策略文件
下一页: 用于安全代码和文件交换的API和工具