서명 된 Java 애플릿을 실행중인 경우 원격 소스 (동일한 도메인 또는 어쩌면 같은 호스트)에서 추가 클래스를로드하고 실행할 수 있습니까?서명 된 애플릿에서 Java 클래스로드
페이지를 변경하거나 현재 애플릿을 중지하지 않고이 작업을 수행하고 싶습니다. 물론 모든 클래스의 전체 크기가 너무 커서 전체를 한 번에로드 할 수 없습니다.
이 방법이 있습니까? 서명 된 애플릿으로이를 수행하고 "신뢰"상태를 유지할 수있는 방법이 있습니까?
서명 된 Java 애플릿을 실행중인 경우 원격 소스 (동일한 도메인 또는 어쩌면 같은 호스트)에서 추가 클래스를로드하고 실행할 수 있습니까?서명 된 애플릿에서 Java 클래스로드
페이지를 변경하거나 현재 애플릿을 중지하지 않고이 작업을 수행하고 싶습니다. 물론 모든 클래스의 전체 크기가 너무 커서 전체를 한 번에로드 할 수 없습니다.
이 방법이 있습니까? 서명 된 애플릿으로이를 수행하고 "신뢰"상태를 유지할 수있는 방법이 있습니까?
클래스는 애플릿에 게으른로드가 있다고 생각합니다. 요청시로드됩니다.
어쨌든 클래스가 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");
기본적으로 애플릿은 새로운 클래스 로더를 만들 수 없습니다. 그러나 애플릿에 서명하고 새 클래스 로더를 만들 수있는 권한을 포함하면 할 수 있습니다.
소리가 가능한 것처럼 들리 겠지만 (나는 한 번도 해 본 적이 없습니다). 원격 메소드 호출 (RMI)을 이미 보셨습니까?
RMI는 내가 찾는 방향이 아니지만 어쨌든 감사드립니다. –
예, 애플릿을 실행 한 호스트에 대한 URL 연결을 열 수 있습니다. HTTP URL을 사용하여 클래스 로더를 만들거나 사용자 컴퓨터에 클래스 (jar)를 다운로드하고 클래스 패스에 해당 jar가있는 클래스 로더를 만들 수 있습니다. 애플릿이 멈추지 않고 다른 페이지를로드 할 필요가 없습니다.
신뢰도에 관한 질문의 두 번째 부분에 대해 사용자가 애플릿에 대한 액세스 권한을 부여하면 로컬 시스템에서 원하는대로 아무 것도 다운로드 할 수 있습니다. UI 디자인에서 허용하는 경우 사용자에게 수행중인 작업을 알릴 수 있습니다.
희망이 도움이됩니다.
훌륭해, 고마워. 나는 두 대답을 모두 받아 들일 수 있었으면 좋겠다. –
불행히도 jassuncao의 답변에 대해 언급했듯이 지금까지로드 된 애플릿에는 적절한 권한이 없습니다. –
고맙습니다. URLClassLoader는 내가 원했던 것처럼 보입니다. 사인 체인을 그대로 유지할 수 있는지 확인해야합니다. –
상위 (로더) 애플릿에 서명 한 후 작동합니다. 그러나 자식 (로드 된) 항아리는 서명 된 경우에도 보안 권한을 얻지 못합니다. –