遵守受限应用

快速浏览控制应用类的最后一部分显示了如何通过使用新的-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语句中指定。