在我的应用程序中,我写了关闭钩子。但是一些第三方代码正在调用那个关闭钩子。 任何第三方代码都不应该调用此关闭挂钩。
我已经编写了阻止第三方关机的代码,但它没有帮助。 (此代码在我的独立测试程序中有效。但在我的应用程序中没有用。)
以下是发生不同行为的代码:
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?
答案 0 :(得分:0)
可能是exitVM.1
,exitVM.2
等,因为该数字只是关闭代码。实际权限称为exitVM
。 (见http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html)。所以你可以使用permission.getName().startsWith("exitVM")
。
但是你要做的事情(阻止应用程序被关闭)听起来可能不是最好的主意。背景是什么?