作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过在 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/
我是一名优秀的程序员,十分优秀!