Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及以后版本中更新的语言特性摘要。
请参阅JDK发行说明了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
正如您在上一步中所看到的,当Java运行时运行一个应用程序时,它不会自动安装安全管理器。为了将相同的安全策略应用于本地文件系统中的应用程序和下载的沙盒小程序,您可以使用新的-Djava.security.manager
命令行参数调用解释器。
要使用默认安全管理器执行GetProps
应用程序,请键入以下内容:
java -Djava.security.manager GetProps
以下是程序的输出:
C:\TEST>java -Djava.security.manager GetProps 即将获取os.name属性值 您的操作系统名称是:SunOS 即将获取java.version属性值 您正在运行的JVM版本是:1.7.0 即将获取user.home属性值 捕获到异常java.security.AccessControlException: 拒绝访问("java.util.PropertyPermission" "user.home" "read")
该过程如下图所示。
Java运行时默认加载一个默认策略文件,并允许所有代码访问一些常用的有用属性,如"os.name"
和"java.version"
。这些属性不是安全敏感的,因此授予这些权限通常不会带来安全风险。
GetProps
尝试访问的其他属性"user.home"
和"java.home"
不在系统策略文件授予读取权限的属性之列。因此,一旦GetProps
尝试访问这些属性中的第一个("user.home"
),安全管理器将阻止访问并报告AccessControlException
。此异常表示当前生效的策略,包括一个或多个策略文件中的条目,不允许读取"user.home"
属性的权限。
默认策略文件java.policy
(默认情况下)位于以下位置:
java.home\lib\security\java.policy
java.home/lib/security/java.policy
请注意,java.home代表"java.home"
属性的值,它是指定JRE安装目录的系统属性。因此,如果JRE在Windows上安装在名为C:\jdk\jre
的目录中,在UNIX上安装在/jdk/jre
目录中,则系统策略文件位于以下位置:
C:\jdk\jre\lib\security\java.policy
/jdk/jre/lib/security/java.policy