首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >犀牛法闭锁/截止器

犀牛法闭锁/截止器
EN

Stack Overflow用户
提问于 2016-10-24 13:49:13
回答 2查看 240关注 0票数 0

我正在寻找一种方法来拦截从JavaScript (Rhino/Java)到任意和所有JavaScript(Java)的所有方法调用。

我想:

  • 计算它们(按方法名称和参数)
  • 如果不允许方法,则可以抛出异常。

在犀牛引擎里有办法做到这一点吗?

我知道还有其他选择,比如面向方面的编程库,但我想避免这些。

我还试图替换Rhino引擎中的NativeJavaMethod实现,但它与系统有很深的联系,不可能被替换。

如果只有一个工厂为那些(如ContextFactory),那将是很好的。

或者像ContextFactory.doTopCall(...)那样的方法调用拦截器,但是对于所有的JS-2-Java调用.

EN

回答 2

Stack Overflow用户

发布于 2016-10-24 14:15:49

我发现犀牛ClassShutter替换: SandboxShutter看起来很有前途。

票数 0
EN

Stack Overflow用户

发布于 2018-04-13 08:19:37

如果您只想拦截对Java对象方法的调用,那么这是可能的。通过重写上下文工厂的makeContext方法来覆盖上下文对象的创建,同时初始化上下文工厂(大多数情况下是全局上下文工厂)。

重写上下文中的包装工厂,重写wrapAsJavaObject方法,并返回一个NativeJavaObject的匿名实现,该实现覆盖get()和put()方法。每次放置某物(比如属性或方法)时,检查它是否是FieldAndMethods。创建一个从FieldAndMethods扩展而来的新类,并包装它(contains),通过将原始对象传递给构造函数来创建这个类的实例,并将这个实例而不是原始实例放在这里。

新的类应该重写call()方法以进行拦截。只需调用包含的对象调用方法。

如果您需要示例代码,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40220166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档