我在我的Java应用程序中嵌入了jython。用户将能够提交并执行一些python脚本。我想确保他们不会从这些脚本访问一些易受攻击的java包/类。另一个选择是根本禁用java集成。
答案 0 :(得分:2)
有可能设置jython将使用的自定义类加载器。代码看起来像这样:
final PySystemState state = new PySystemState();
state.setClassLoader(new MyClassLoader());
Py.setSystemState(state);
然后在MyClassLoader中,您可以检查脚本中正在访问哪个java类,并根据某些条件拒绝它。这看起来像那样
public class MyClassLoader extends ClassLoader
{
@Override
protected synchronized Class<?> loadClass(final String className, final boolean resolve)
throws ClassNotFoundException
{
if (className.startsWith("secret.class"))
{
throw new RuntimeException();
}
return MyClassLoader.getSystemClassLoader().loadClass(className);
}
}
答案 1 :(得分:1)
查看java安全管理器,它允许您选择可以访问的内容。