Rhino方法快门/拦截器

时间:2016-10-24 13:49:13

标签: javascript java interceptor rhino method-interception

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

我想:

  • 计算它们(通过方法名称和参数)
  • 如果不允许该方法,则能够抛出异常

在Rhino-Engine中有没有办法解决这个问题?

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

我还试图替换Rhino引擎中的NativeJavaMethod实现,但是它与系统非常相关,无法替换。

如果只有一个工厂(就像使用ContextFactory那样)会很棒。

或类似ContextFactory.doTopCall(...)的方法调用拦截器,但适用于所有JS-2-Java调用。

2 个答案:

答案 0 :(得分:0)

我发现Rhino ClassShutter replacement: SandboxShutter看起来很有希望。

答案 1 :(得分:0)

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

覆盖上下文中的wrap工厂并覆盖wrapAsJavaObject方法并返回一个覆盖get()和put()方法的NativeJavaObject的匿名实现。每次放置某些东西(如属性或方法),检查它是否为FieldAndMethods。创建一个从FieldAndMethods扩展并包装它(包含)的新类,通过将原始对象传递给构造函数来创建此类的实例,并将此实例放在原始实例中。

新类应覆盖用于拦截的call()方法。并只调用包含的对象调用方法。

如果您需要示例代码,请与我们联系。