本教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及以后版本中更新的语言特性的摘要,请参见Java语言变化。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参见JDK发布说明。
控制应用程序快速浏览课程的最后一部分展示了如何通过使用新的-Djava.security.manager
命令行参数来调用解释器来在安全管理器下运行应用程序。但是,如果要调用的应用程序位于JAR文件中怎么办呢?
解释器选项之一是-cp
(类路径)选项,它允许您指定应用程序类和资源的搜索路径。因此,要执行sCount.jar
JAR文件中的Count
应用程序,并将文件C:\TestData\data
指定为其参数,可以在包含sCount.jar
的目录中键入以下命令:
java -cp sCount.jar Count C:\TestData\data
要使用安全管理器执行应用程序,请添加-Djava.security.manager
,如下所示:
java -Djava.security.manager -cp sCount.jar Count C:\TestData\data
重要提示: 运行此命令时,您的Java解释器将抛出以下异常:
Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission C:\TestData\data read) at java.security.AccessControlContext.checkPermission(Compiled Code) at java.security.AccessController.checkPermission(Compiled Code) at java.lang.SecurityManager.checkPermission(Compiled Code) at java.lang.SecurityManager.checkRead(Compiled Code) at java.io.FileInputStream.<init>(Compiled Code) at Count.main(Compiled Code)
在此示例中,AccessControlException
报告称count
应用程序没有读取文件C:\TestData\data
的权限。您的解释器引发此异常,因为除非应用程序具有明确的权限(通常在policy
文件中的grant
语句中指定),否则它不允许任何在安全管理器下运行的应用程序读取文件或访问其他资源。