我想限制我的JVM通过策略文件退出vm,但它不起作用。你能帮助我如何在java.io.RuntimePermission中重写访问权限吗?
grant {
permission java.io.RuntimePermission "exitVM", "none";
};
答案 0 :(得分:1)
查看RuntimePermission的javodoc:
此类用于运行时权限。 RuntimePermission包含一个 name(也称为"目标名称")但没有动作列表;您 要么拥有指定的权限,要么就是没有。
因此,"无"您的权限设置中的操作不正确。
关于exitVM
权限:
权限目标名称:exitVM。{退出状态}
权限允许:暂停具有指定退出状态的Java虚拟机
允许此权限的风险:这允许攻击者通过自动强制虚拟攻击来发起拒绝服务攻击 机停了。注意:" exitVM。"权限是自动的 因此,授予从应用程序类路径加载的所有代码 使应用程序能够自行终止。此外," exitVM" 权限等同于" exitVM。"。
因此,权限名称的有效语法是" exitVM"," exitVM。*"," exitVM.n" (其中n表示退出代码)。
问题在于,正如文档中所述, " exitVM。*"权限自动授予从应用程序类路径 加载的所有代码。因此,如果调用System.exit(...)的代码位于java命令行中设置的主类路径中,则无法阻止它工作。例如,如果调用System.exit(...)的代码是从单独的类加载器加载的,那么就不会出现这种情况。
另请注意,grant
语句用于授予权限,而不是拒绝权限。据此,唯一可以否认" exitVM"权限是永远不会授予它。