观察受限制的应用程序

原文: https://docs.oracle.com/javase/tutorial/security/toolsign/rstep1.html

控制应用程序快速浏览课程的最后一部分显示了如何通过使用新的-Djava.security.manager命令行参数调用解释器在安全管理器下运行应用程序。但是如果要调用的应用程序驻留在 JAR 文件中呢?

其中一个解释器选项是-cp(用于类路径)选项,它允许您为应用程序类和资源指定搜索路径。因此,要在sCount.jar JAR 文件中执行Count应用程序,指定文件C:\TestData\data作为其参数,可以在包含sCount.jar的目录中键入以下命令:

  1. java -cp sCount.jar Count C:\TestData\data

要使用安全管理器执行应用程序,请添加-Djava.security.manager,如下所示:

  1. java -Djava.security.manager -cp sCount.jar Count C:\TestData\data

重要:运行此命令时,Java 解释器将抛出如下所示的异常:

  1. Exception in thread "main" java.security.AccessControlException:
  2. access denied (java.io.FilePermission C:\TestData\data read)
  3. at java.security.AccessControlContext.checkPermission(Compiled Code)
  4. at java.security.AccessController.checkPermission(Compiled Code)
  5. at java.lang.SecurityManager.checkPermission(Compiled Code)
  6. at java.lang.SecurityManager.checkRead(Compiled Code)
  7. at java.io.FileInputStream.<init>(Compiled Code)
  8. at Count.main(Compiled Code)

在此示例中,AccessControlException报告count应用程序无权读取文件C:\TestData\data。您的解释器引发了此异常,因为它不允许在安全管理器下运行的任何应用程序读取文件或访问其他资源,除非它有明确的权限这样做 - 通常在policy中包含的grant语句中指定文件。