遵守受限应用
快速浏览控制应用类的最后一部分显示了如何通过使用新的-Djava.security.manager
命令行参数调用解释器来在安全 管理 器下运行应用程序。但是,如果要调用的应用程序驻留在 JAR 文件中怎么办?
解释器选项之一是-cp
(用于 Classpath)选项,该选项可让您指定应用程序类和资源的搜索路径。因此,要在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
语句中指定。