gpt4 book ai didi

java - 如何从自定义 SecurityManager 的 checkExit() 方法中确定调用 System.exit() 的类?

转载 作者:行者123 更新时间:2023-12-01 12:48:46 24 4
gpt4 key购买 nike

我正在编写一个 SecurityManager ,它应该只允许来自单个类的 System.exit() 调用。问题是这个类也是包含正在运行应用程序的 main() 方法的类,因此使用 SecurityManager.inClass() 不起作用 - 我们'我总是在那个类(class)。我需要知道该类是否是明确尝试退出的类。这可能吗?

最佳答案

您可以查看 StackTrace。

StackTraceElemment[] stes = Thread.currentThread().getStackTrace();
// find the first non system package
int i = 0;
for(; i < stes.length-1;i++)
if (!stes.getClassName().startsWith("java.lang."))
break;
// is that package/class ok?
if (stes[i].getClassName().startsWith("my.ok.package."))

有更有效的方法可以使用内部 API 来执行此操作,但它们不是标准的,即使在 HotSpot 的 Java 版本之间也是如此。

注意:如果已包含调试信息,这将为您提供方法名称,还可能提供文件名和行号。它不会给你的是实际的类(class)。使用多个类加载器,您可以拥有多个同名的类,并且无法知道它是哪一个。您得到的只是包和类名,而不是类加载器。

关于java - 如何从自定义 SecurityManager 的 checkExit() 方法中确定调用 System.exit() 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com