如何从Jython禁用对某些Java包的调用

时间:2011-05-05 08:51:57

标签: java security jython

我在我的Java应用程序中嵌入了jython。用户将能够提交并执行一些python脚本。我想确保他们不会从这些脚本访问一些易受攻击的java包/类。另一个选择是根本禁用java集成。

2 个答案:

答案 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安全管理器,它允许您选择可以访问的内容。