我正在寻找一种方法来拦截从JavaScript (Rhino/Java)到任意和所有JavaScript(Java)的所有方法调用。
我想:
在犀牛引擎里有办法做到这一点吗?
我知道还有其他选择,比如面向方面的编程库,但我想避免这些。
我还试图替换Rhino引擎中的NativeJavaMethod实现,但它与系统有很深的联系,不可能被替换。
如果只有一个工厂为那些(如ContextFactory),那将是很好的。
或者像ContextFactory.doTopCall(...)那样的方法调用拦截器,但是对于所有的JS-2-Java调用.
发布于 2016-10-24 14:15:49
我发现犀牛ClassShutter替换: SandboxShutter看起来很有前途。
发布于 2018-04-13 08:19:37
如果您只想拦截对Java对象方法的调用,那么这是可能的。通过重写上下文工厂的makeContext方法来覆盖上下文对象的创建,同时初始化上下文工厂(大多数情况下是全局上下文工厂)。
重写上下文中的包装工厂,重写wrapAsJavaObject方法,并返回一个NativeJavaObject的匿名实现,该实现覆盖get()和put()方法。每次放置某物(比如属性或方法)时,检查它是否是FieldAndMethods。创建一个从FieldAndMethods扩展而来的新类,并包装它(contains),通过将原始对象传递给构造函数来创建这个类的实例,并将这个实例而不是原始实例放在这里。
新的类应该重写call()方法以进行拦截。只需调用包含的对象调用方法。
如果您需要示例代码,请告诉我。
https://stackoverflow.com/questions/40220166
复制相似问题