2011-02-05 28 views
3

Java小程序不允許您編寫自定義ClassLoader,除非您對小程序進行簽名。這是爲什麼?自定義類加載器只是找到類的工具。除了通過調用私有的「defineClass」方法之外,實際上無法加載該類,因爲它是由VM編寫和控制的「可信」代碼,而不是由您的小程序執行。它不像你獲得更多的權限而不是動態加載一個類的能力......真的什麼都沒有。爲什麼不允許未簽名的applet創建自定義ClassLoaders?

我想作爲一個方面的問題:是否有任何其他方式從

byte[] => Class 

這是由未簽名的Applet允許動態地去了?

回答

4

defineClass具有一個ProtectionDomain參數,您可以使用包含AllPermission的PermissionCollection傳遞參數,這將允許您對主機執行基本任何操作。

+0

所以,實際上,如果此方法在ProtectionDomain賦予比加載代碼更多的權限時引發異常,那麼是否不夠? 或者只是限制當前權限和給定權限的交集權限(所以小程序可以用比自己小的權限加載代碼)? – 2011-02-05 23:47:58

0

請注意,您可以使用java.net.URLClassLoader.newInstance創建一個ClassLoader。正如bkail所指出的,自定義ClassLoader可以創建具有任意權限的類,也可以繞過其他安全約束。至於爲什麼沒有什麼比java.net.URLClassLoader.newInstance更普遍,那麼就沒有。

相關問題