2009-11-24 119 views
3
grant { 
    permission java.io.FilePermission "C:\\class\\*", "read, write"; 
    permission java.lang.RuntimePermission "createClassLoader"; 
}; 

我policy.txt中Java安全管理

java.security.AccessControlException: access denied (java.io.FilePermission c:\class read) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkRead(Unknown Source) 
    at java.io.File.isDirectory(Unknown Source) 
    at java.io.File.toURI(Unknown Source) 
    at loader.Main.main(Main.java:35) 

我例外.. ???

我的電話

String path = "c:\\class\\"; 
String app = "x.MyHTMLPrint"; 


File file = new File(path); 
URL url = file.toURI().toURL(); 
URL[] urls = new URL[]{url}; 

ClassLoader cl = new URLClassLoader(urls); 
Class cls = cl.loadClass(app); 

只要我給它充分的權限它的工作原理。

有什麼想法?謝謝!

+4

對策略文件並不熟悉,但是,在我看來,你說的是你可以讀取C:\ class下的任何東西,但是嘗試訪問C:\ class本身。 – Yishai 2009-11-24 23:01:47

+0

您究竟如何致電您的計劃? – ankon 2009-11-24 23:39:16

回答

8

那裏似乎有兩個問題。

首先,正如Yishai所說,File.toURI似乎需要檢查沒有尾隨分隔符的文件是一個目錄。這可能是一個錯誤。

其次,遞歸子目錄的通配符是' - '而不是'*'。

所以,你的政策文件需要看起來像:

grant { 
    permission java.io.FilePermission "C:\\class\\-", "read"; 
    permission java.io.FilePermission "C:\\class", "read"; 
    permission java.lang.RuntimePermission "createClassLoader"; 
}; 

另外,如果你使用URLClassLoader.newInstance,你不需要createClassLoader權限,你會得到一個完整的類加載器實現。