此 Java 教程适用于 JDK 8。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java 语言更改了解 Java SE 9 及后续版本中更新的语言特性的概要。
请参阅JDK 发行说明了解所有 JDK 版本的新功能、增强功能以及已删除或已弃用选项的信息。
现在你已经将所需的策略条目添加到examplepolicy
策略文件中,当你使用安全管理器执行GetProps
应用程序时,应该能够读取指定的属性,如下图所示。
每当运行小程序或者使用安全管理器运行应用程序时,默认加载和使用的策略文件是在“安全属性文件”中指定的策略文件,该文件位于以下目录之一:
java.home\lib\security\java.security
java.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
${propName}
的符号是一种指定属性值的方式。因此,${java.home}
将在运行时被实际的"java.home"
属性值替换,该属性值指示JRE被安装的目录,${user.home}
将被"user.home"
属性值替换,例如C:\Windows
。
有两种可能的方式可以将examplepolicy
文件视为整体策略的一部分,除了在安全属性文件中指定的策略文件外。你可以使用传递给运行时系统的属性来指定附加的策略文件,如方法1中所述,或者在安全属性文件中添加一行来指定附加的策略文件,如方法2所讨论的那样。
你可以使用-Djava.security.policy
解释器命令行参数来指定一个策略文件,该文件应该被用于除了在安全属性文件中指定的策略文件之外。
确保你在包含 GetProps.class
和 examplepolicy
的目录中。然后你可以运行 GetProps
应用程序,并通过以下命令一行输入 examplepolicy
策略文件来将其传递给解释器:
java -Djava.security.manager -Djava.security.policy=examplepolicy GetProps
注意:记住需要使用 -Djava.security.manager
来运行带有安全管理器的应用程序,如 查看如何限制应用程序 步骤中所示。
该程序报告了 "user.home"
和 "java.home"
属性的值。
如果应用程序仍然报告错误,说明策略文件中存在问题。请使用策略工具检查在 设置策略文件以授予所需权限 步骤中创建的策略条目。
您可以在安全属性文件中的 policy.url.n
属性中指定多个URL,所有指定的策略文件都将被加载。因此,让 java
解释器考虑你的 examplepolicy
文件的策略条目的一种方法是在安全属性文件中添加一个指定该策略文件的条目。
要修改安全属性文件,请使用适合编辑 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
文件。