2011-05-05 50 views
1

我在我的Java应用程序中嵌入了jython。用户将能够提交和执行一些python脚本。我想确保他们不会从这些脚本中访问一些易受攻击的java包/类。另一种选择是根本禁用java整合。如何从Jython中禁用对某些Java包的调用

回答

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

看看java安全管理器,它允许您选择可以访问或不可访问的内容。

相关问题