2011-05-05 82 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安全管理器,它允許您選擇可以訪問或不可訪問的內容。

相關問題