gpt4 book ai didi

java - 我如何禁止 jar 在 java 中创建新线程

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

我创建了一个简单的插件系统,允许其他人上传他们的插件的 jar,插件系统将加载它并执行其中的一些代码。

插件系统将获得 Function<Input, Output> 的子类执行加载的插件逻辑,但我不希望该函数创建新线程或执行一些危险操作,例如 System.exit 。我怎样才能禁止这个行为?

我找到了AccessControllerSecurityManager在Java中,如何使用它来实现我的意图。

最佳答案

正如您所说,您可以添加安全管理器。如下所示:您可以将代码放在 try catch block 中并捕获抛出的自定义安全异常。下面的代码在循环中运行并不断调用 System.exit(1);

import java.security.Permission;

public class TestPreventSystemExit {

public static void main(String[] args) {
forbidSystemExitCall();
while (true) {
try {
System.exit(1);
} catch (Exception ex) {

}
}
}

private static class PreventExitException extends SecurityException {
}

private static void forbidSystemExitCall() {
final SecurityManager securityManager = new SecurityManager() {
public void checkPermission(Permission permission) {
if (permission.getName().indexOf("exitVM") >= 0) {
System.out.println("Why you did this to me? :)");
throw new PreventExitException();
}
}
};
System.setSecurityManager(securityManager);
}

}

关于java - 我如何禁止 jar 在 java 中创建新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666810/

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