我已经在使用 Java 8 及其 Nashorn javascript引擎了。在我的应用程序中,我出于各种目的从Java classess访问javaScript脚本文件。然而,也可以从javaScript代码访问Java类。但由于我的应用程序中的JavaScripts也可以由第三方编写, 我想限制它们(JS脚本)访问Java模块。 (特别禁止某些Java类)
我不想限制对Java类的所有访问,只是想找到一种限制或禁止某些特定java类的方法。
在 Nashorn 中,我们可以使用 ClassFilters (覆盖' exposeToScripts()'方法),如下所示
class MyCF implements ClassFilter {
@Override
public boolean exposeToScripts(String s) {
if (s.compareTo("myPackage.MyClass") == 0) return false;
return true;
}
}
但是我们如何使用Java Security Manager来做同样的事情,或者使用ClassFilter(如上所述)足以捕获和限制所有不需要的Java类访问的方式。
答案 0 :(得分:1)
ClassFilter不是安全管理器的替代品! ClassFilter JEP页面 - > http://openjdk.java.net/jeps/202在非目标部分明确指出:
/ [这不会]使安全管理器成为脚本的冗余。在评估来自不受信任来源的脚本之前,嵌入应用程序仍应启用安全性管理。单独的类过滤不会提供完整的脚本“sandbox”。
ClassFilter可以更好地控制安全管理器。例如,您可以通过阻止访问java.lang.Thread类[以及它的名称子类]来避免从脚本创建线程。