在没有exitVM.0的情况下调用Java Shutdown钩子来自permission.getName()

时间:2015-05-28 06:22:00

标签: java

在我的应用程序中,我写了关闭钩子。但是一些第三方代码正在调用那个关闭钩子。 任何第三方代码都不应该调用此关闭挂钩。

我已经编写了阻止第三方关机的代码,但它没有帮助。 (此代码在我的独立测试程序中有效。但在我的应用程序中没有用。)

以下是发生不同行为的代码:

    final SecurityManager securityManager = new SecurityManager() {
        public void checkPermission(Permission permission) {
            System.out.println("In checkPermission:{" + permission.getName() + "}");
            if ("exitVM.0".equals(permission.getName())) {
                throw new ExitTrappedException();
            }
        }
    };

当我在Test程序中执行此代码时,当关闭被调用时,它给我"在checkPermission:{exitVM.0}"。因此,如果条件和我的关闭钩子被阻止它就会进入。 现在,当我在我的应用程序中尝试相同的事情时,这个" exitVM.0"没有得到印刷,关闭钩子正在被召唤。

有什么建议吗?是否有任何不同的permission.getName()可以调用shutdown hook?

1 个答案:

答案 0 :(得分:0)

可能是exitVM.1exitVM.2等,因为该数字只是关闭代码。实际权限称为exitVM。 (见http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html)。所以你可以使用permission.getName().startsWith("exitVM")

但是你要做的事情(阻止应用程序被关闭)听起来可能不是最好的主意。背景是什么?