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

내 인 policy.txt자바 보안 관리자

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

+0

프로그램을 정확히 어떻게 부르시겠습니까? – ankon

답변

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 권한은 필요하지 않습니다, 당신은 완성 된 클래스 로더 구현을 얻는다.