犀牛(Rhino): 限制JavaScript可以访问的Java包

12

当将JavaScript解释器(Rhino)嵌入到Java应用程序中(以便能够为该应用编写脚本)时,如何限制可以在脚本中使用的Java包?例如,只允许访问"java.lang.*"。

2个回答

9
这里描述了一种在Rhino中阻止访问特定包和类(包括通过反射)的方法(链接)。重要接口是ClassShutter,它为Rhino的LiveConnect支持提供了访问控制。

1
具有讽刺意味的是,关于阻止访问codeutopia.net的链接对我来说返回了403 Forbidden。 - Nathan Voxland

1

怎么样只是说:

java = undefined; com = undefined; Packages = undefined;

在一个最先加载的初始脚本中。


3
有趣的方法,如果你想关闭所有对Java的访问(而不仅仅是特定的包),那么这个方法可能有效。另一方面,你可能仍然可以在解释器范围内使用 obj.getClass().forName("a.b.c.TheClass").newInstance() 来创建任何对象。 - Thilo
@Thilo 如果你的对象是JavaScript对象(这也是你应该做的),就不需要进行判断。 - Zo72
这是一个不好的想法,因为JavaScript方法似乎调用了java.io函数,如果它们找不到java类,则会失败。在取消定义java后尝试评估print("Hello World");并查看结果 - TypeError: Cannot read property "io" from undefined. - chrixm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接