2011-04-07 61 views
3

我有一個加載插件(純JAR文件)並從中運行代碼的應用程序。插件使用URLClassLoader加載。我想阻止這些插件訪問文件和其他資源,同時保留我自己的代碼的所有權限。Java安全策略:根據類加載器授予訪問權

以下是插件代碼與我自己的應用程序及其庫不同的兩個特性: 1)它由爲此目的創建的URLClassLoader加載。 2)它的jar文件被複制到一個特定的目錄,URLClassLoader從這個目錄中獲取它們。

但我看不出我如何使用任一功能來制定策略規則。 classloader根本不能在策略規則中使用(可以理解,它是在運行時創建的)。該目錄可用於授予特定權限,但不能將其刪除。似乎沒有「除了這個目錄之外的任何地方的代碼」的語法。

還有其他的選擇嗎?

回答

1

子類URLClassLoader。加回你錯過的安全位,不要使用URLClassLoader.newInstance。覆蓋URLClassLoader.getPermissions(CodeSource)以返回適當的權限。

這可能是最好的,如果父類加載器只有普通類型的插件[靜態]使用。主應用程序應該從不同的子類加載器加載。實現類也可以被package.access安全屬性隱藏。

+0

工作正常,謝謝! – khinsen 2011-04-08 08:03:07

+0

我在這個問題在這裏實現了這個解決方案:http://stackoverflow.com/questions/26340118/extending-urlclassloader-and-overriding-getpermissions-does-not-work - 但我無法得到它的工作,你可能也許看看它,並指出缺陷? – skiwi 2014-10-13 12:34:59