2008-09-13 6 views
5

서명 된 Java 애플릿을 실행중인 경우 원격 소스 (동일한 도메인 또는 어쩌면 같은 호스트)에서 추가 클래스를로드하고 실행할 수 있습니까?서명 된 애플릿에서 Java 클래스로드

페이지를 변경하거나 현재 애플릿을 중지하지 않고이 작업을 수행하고 싶습니다. 물론 모든 클래스의 전체 크기가 너무 커서 전체를 한 번에로드 할 수 없습니다.

이 방법이 있습니까? 서명 된 애플릿으로이를 수행하고 "신뢰"상태를 유지할 수있는 방법이 있습니까?

답변

5

클래스는 애플릿에 게으른로드가 있다고 생각합니다. 요청시로드됩니다.

어쨌든 클래스가 jar 밖에있는 경우 애플릿 클래스 로더를 사용하고 이름으로로드하면됩니다. 예 :

ClassLoader loader = this.getClass().getClassLoader(); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

당신은 내가 당신이 항아리 (들)의 URL (들) URLClassLoader의 새로운 인스턴스를 작성해야합니다 생각 항아리에서 클래스를로드합니다.

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")}; 
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader()); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

기본적으로 애플릿은 새로운 클래스 로더를 만들 수 없습니다. 그러나 애플릿에 서명하고 새 클래스 로더를 만들 수있는 권한을 포함하면 할 수 있습니다.

+0

고맙습니다. URLClassLoader는 내가 원했던 것처럼 보입니다. 사인 체인을 그대로 유지할 수 있는지 확인해야합니다. –

+1

상위 (로더) 애플릿에 서명 한 후 작동합니다. 그러나 자식 (로드 된) 항아리는 서명 된 경우에도 보안 권한을 얻지 못합니다. –

0

소리가 가능한 것처럼 들리 겠지만 (나는 한 번도 해 본 적이 없습니다). 원격 메소드 호출 (RMI)을 이미 보셨습니까?

+0

RMI는 내가 찾는 방향이 아니지만 어쨌든 감사드립니다. –

2

예, 애플릿을 실행 한 호스트에 대한 URL 연결을 열 수 있습니다. HTTP URL을 사용하여 클래스 로더를 만들거나 사용자 컴퓨터에 클래스 (jar)를 다운로드하고 클래스 패스에 해당 jar가있는 클래스 로더를 만들 수 있습니다. 애플릿이 멈추지 않고 다른 페이지를로드 할 필요가 없습니다.

신뢰도에 관한 질문의 두 번째 부분에 대해 사용자가 애플릿에 대한 액세스 권한을 부여하면 로컬 시스템에서 원하는대로 아무 것도 다운로드 할 수 있습니다. UI 디자인에서 허용하는 경우 사용자에게 수행중인 작업을 알릴 수 있습니다.

희망이 도움이됩니다.

+0

훌륭해, 고마워. 나는 두 대답을 모두 받아 들일 수 있었으면 좋겠다. –

+0

불행히도 jassuncao의 답변에 대해 언급했듯이 지금까지로드 된 애플릿에는 적절한 권한이 없습니다. –