首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁止调用System.exit

禁止调用System.exit
EN

Stack Overflow用户
提问于 2011-11-25 22:14:14
回答 3查看 2.5K关注 0票数 11

我正在尝试禁止在一些jars中调用System.exit(int);

这些jars将由外部团队开发,并由我们的“容器”应用程序加载。

我的第一个反应是使用java安全管理器:

代码语言:javascript
复制
-Djava.security.manager-Djava.security.debug=all

使用最简单的${user.home}/.java.policy文件:

代码语言:javascript
复制
grant {};

虽然我不能再调用这样的System.getProperties () (因为我没有java.util.PropertyPermission),但我可以执行System.exit (0) !!

选项java.security.debug=all提供以下控制台:

代码语言:javascript
复制
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)
)

为什么my-bin-path中的所有类都被授予java.lang.RuntimePermission exitVM

谢谢

EN

回答 3

Stack Overflow用户

发布于 2013-01-12 02:41:34

根据bug报告http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4286238,策略文件没有禁止System.exit()调用。我正在运行一个使用Java1.6的应用程序,尽管它已经“解决”了,但我仍然看到了这个错误。与OP类似,我有一个系统范围的策略文件,其中不包括对exitVM的权限。但是,我能够退出应用程序而不会抛出任何异常。

我对包含自定义策略文件的理解是,除策略文件中包含的权限外,所有权限都被列入黑名单。因为没有包含exitVM,所以应该禁止它(覆盖MicSim提到的默认权限)。但事实并非如此。

票数 3
EN

Stack Overflow用户

发布于 2011-11-26 00:24:39

来自RuntimePermission的Javadoc

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

阅读本文时,您似乎必须通过编写自己的SecurityManager来明确拒绝此权限。(有关示例,请参阅此答案:Prevent System.exit to actually exit the JVM)

票数 2
EN

Stack Overflow用户

发布于 2011-11-26 01:28:31

或者,您可以执行AOP并截取System.exit。您自己可以这样做:创建自己的类加载器,使用BPEL跟踪System.exit,并修补这些调用。真的不是很大的努力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8270340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档