我试图禁止在一些罐子中调用System.exit(int);
。禁止呼叫System.exit
这些罐子将由外部团队开发并由我们的“容器”应用程序加载。
我的第一个反应是使用Java安全管理器:
-Djava.security.manager-Djava.security.debug=all
用最简单的${user.home}/.java.policy
文件:
grant {};
虽然我不能再调用如System.getProperties()(自我没有java.util.PropertyPermission),我可以做一个System.exit(0)!
选项java.security.debug=all
提供了以下控制台:
scl: getPerms ProtectionDomain (file: my-bin-path <no sign certificates>)
sun.misc.Launcher $ AppClassLoader @ 10385c1
<no principals>
java.security.Permissions @ 15b7986 (
(java.lang.RuntimePermission exitVM)
(java.io.FilePermission \my-bin-path\- read)
)
为什么在我彬路径中的所有类都java.lang.RuntimePermission exitVM
授予?????
感谢
显然'java.lang.RuntimePermission exitVM'是默认授予的,也许你必须明确地拒绝它。 – Romain
我希望exitVM权限默认打开。如果一段Java代码到达其执行的末尾,那么可能需要隐式调用System.exit(0)来告诉虚拟机已完成。 – Chris
虽然我假设你想知道如何关闭它,但会建议编辑问题来具体询问。 – Chris