gpt4 book ai didi

clojure - 阻止我无权访问的代码中的系统/退出

转载 作者:行者123 更新时间:2023-12-03 00:27:31 27 4
gpt4 key购买 nike

我正在通过在 repl 中检查别人的代码来玩弄它。

它不断调用 System/exit,这导致我的 repl 崩溃。这真是令人气愤。

在我有权访问的所有代码中,我都模拟了调用。

但它也会调用一些我没有源代码的库代码,包括 java 和 clojure,这有时也会导致退出。

有什么方法可以全局捕获这些调用,以便调用它们的尝试不会杀死 repl 线程吗?理想情况下,它只会抛出异常。

我认为在java中我可以安装一个新的SecurityManager来获得这种效果,但我从来没有这样做过

这行里似乎有一些东西: http://jroller.com/ethdsy/entry/disabling_system_exit

所以我在想:

(System/setSecurityManager (SecurityManager.))

只有我需要以某种方式附加

  public void checkPermission( Permission permission ) {
if( "exitVM".equals( permission.getName() ) ) {
throw new ExitTrappedException() ;
}
}

到目前为止我最好的镜头是:

(System/setSecurityManager
(proxy [SecurityManager] []
(checkPermission [p]
(when (= "exitVM" (.getName p))
(throw (Exception. "exit"))))))

或者也许

(System/setSecurityManager 
(proxy [SecurityManager] []
(checkExit [n] false)))

但他们都只是破坏了repl

或者有更好的方法吗?

最佳答案

使用 AspectJ 并以 no 操作拦截所有对 System.exit() 的调用。

但是你是对的,只需配置安全管理器就会更明智。

关于clojure - 阻止我无权访问的代码中的系统/退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973263/

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