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中,我正确地得到了异常。
答案 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)