2012-09-11 8 views
0

나는 Capture, AppletLogging 및 AbstractJLabel이라는 세 가지 클래스가 있습니다. . 나는 나의 %의 USERPROFILE의 %/한 java.policy 파일에 다음과 같은 권한을 설정 한 :동일한 코드베이스에있는 애플릿 클래스가있는 AccessControlException

grant codeBase "file:/C:/project/abc/target/test-classes/-" { 
    permission java.util.logging.LoggingPermission "control"; 
}; 

모든 클래스는 위의 부여에서 코드베이스에 있습니다. Capture가 AppletLogging에서 정적 메소드를 호출하면 모든 것이 정상적으로 작동합니다. AbstractJLabel가 AppletLogging에서 같은 정적 메소드를 호출하면 그때 이것은 썬 자바 플러그인 버전에서 실행

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control) 

6 업데이트 35이 사람이 설명이 있습니까 얻을? 캡처 및 AbstractJLabel 정적 블록에서 정적 메소드를 호출하는 것이

permission java.security.AllPermission; 

참고 : 나는 같은 나는 모든 보조금 코드베이스 블록에 다음과 같은 경우에도 오류가 발생합니다.

+0

애플릿이 신뢰를 필요로하는 경우 코드를 jar하고 디지털 서명하십시오. 사람들이 애플릿의 정책 파일을 왜 귀찮게하는지 이해할 수 없습니다. 정책 파일은 사용자가 제어하는 ​​시스템을 제외하고 배포에 적합하지 않으며, 그렇다면 JWS가 더 나은 배포 옵션 일 수 있습니다. –

+0

(정적 초기화 프로그램은 불행히도 "Java 2 보안 모델"에 의해 특별하게 다루어지지 않습니다. 스택 기반 보안 검사는 클래스 로더를 통과하여 클래스 초기화를 일으키는 코드로 되돌아갑니다.) –

답변

1

내가 직면 한 문제는 AccessControlException이있을 때마다 실행 중이던 스레드가 Javascript에서 호출 되었기 때문입니다. 애플릿이 호스팅되는 페이지에서 애플릿 태그에 대한 참조가 있음을 설명합니다. 애플릿 태그를 참조하는 Javascript 변수에서 Java 애플릿 클래스에 대한 공용 인스턴스 메소드를 호출 할 수 있습니다. 이 경우 스레드는 애플릿 (또는 기본 애플릿 클래스가 포함 된 jar)의 코드를 실행 중이지만 호출이 외부에서 왔기 때문에 애플릿 코드 기반의 권한을 상속하지 않습니다. 해결 방법은, AccessController.doPrivileged 내의 액세스권을 필요로하는 Java 코드를 호출하는 것입니다.