在安全管理器下没有授权的System.exit(0)

时间:2013-04-06 17:31:24

标签: java grant securitymanager system.exit

System.exit(0); or
System.exit(2);

可以无误地执行, 用

运行
java -Djava.security.manager -Djava.security.policy==app.policy -cp bin pl.com.App

app.policy:

grant {
      permission java.io.FilePermission "./*", "read,write";
      permission java.net.SocketPermission "localhost:18080", "accept, connect, listen";
      //permission java.util.PropertyPermission "java.home", "read";
};

写入文件的安全管理器工作正常,当我从app.policy中删除grant时,我在执行新的FileWriter(“out.txt”)时正确得到Exception;

C:\ workspace_tomcat \ secureWeb> java -version

java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

我跑的时候     System.exit(0); 在带有安全管理器的Tomcat下的webapp中,我正确地得到了异常。

1 个答案:

答案 0 :(得分:2)

Javadoc声明(http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html):

  

注意:“exitVM。*”权限自动授予从应用程序类路径加载的所有代码,从而使应用程序能够自行终止

当您将代码作为独立应用程序运行时,这适用。 这同样适用于Tomcat - 它可能会自行关闭。 但是这是扩展到在Tomcat容器中运行的程序。这些程序完全由Tomcat安全管理器控制:(http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html