【发布时间】:2012-01-06 09:45:42
【问题描述】:
我正在尝试禁止在某些 jar 中调用 System.exit(int);。
这些 jar 将由外部团队开发并由我们的“容器”应用程序加载。
我的第一反应是使用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)
)
为什么 my-bin-path 中的所有类都授予 java.lang.RuntimePermission exitVM ?????
谢谢
【问题讨论】:
-
显然
java.lang.RuntimePermission exitVM是默认授予的,也许你必须明确拒绝。 -
我希望 exitVM 权限默认开启。如果一段 Java 代码到达其执行的末尾,那么它可能需要隐式调用 System.exit(0) 来告诉 VM 它已完成。
-
我假设您想知道如何将其关闭,但建议您编辑问题以明确提出该问题。
-
系统范围的策略文件是什么样的?
${java.home}/lib/security/java.security -
据我了解,java.policy 文件仅授予权限。所以我认为“不打开它让它关闭”因为 jre/lib/security/java.policy 没有授予 java.lang.RuntimePermission exitVM ...
标签: java securitymanager