서명 된 애플릿이 출발하는 다른 호스트와 연결할 수 있습니까?
문제
소켓을 열고 애플릿이 다운로드 한 로컬 호스트 (최종 사용자 시스템)의 서버와 통신하려면 애플릿이 필요합니다.
애플릿 보안에 대해 읽은 내용과는 달리, 서명 된 애플릿조차도 다운로드 된 다른 호스트에 소켓을 열 수없는 것 같습니다 (동일한 기계에서 완벽하게 작동 함).
나는 -selfcert를 사용하여 애플릿을 인증하고 Jarsigner를 사용하여 서명했지만 여전히 다른 호스트에 소켓을 열려고 할 때마다 다음을 얻습니다.
Java.lang.Exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)
서명 된 애플릿을 사용하면 그렇게 할 필요는 없지만 Java 정책 파일을 변경하려고 시도했습니다.
grant codeBase "http://applethost:8080/socket" {
permission java.security.AllPermission;
permission java.lang.RuntimePermission "usePolicy";
};
Sigend Applets와의 거래는 무엇입니까? 그들은 다른 호스트에게 연결할 수 있습니까?
해결책
예, 애플릿을로드 할 때 인증서를 수락하여 신뢰하기로 선택하면 SocketPermission을 포함하여 AllPermission이 부여됩니다. 로드 된 호스트 이외의 호스트와 연결되기 전에 서명 된 애플릿을 작성했습니다. Java 정책 파일을 일시적으로 변경하려고 시도 할 수 있습니다.
grant {
permission java.security.AllPermission;
};
- 정책 파일을보고 다른 정책을 정의하는지 확인하십시오.
- JavaScript의 브라우저 설정을 확인하십시오.
- 애플릿에 대한 인증서를 수락하고 사이트 인증서 목록에 설치되어 있는지 확인하십시오.
- 보유한 보조금 코드베이스 라인이 애플릿 매니페스트의 코드베이스와 동일해야합니다.
- 연결을 시도하기 전에 애플릿이 가지고있는 권한 목록을 인쇄 할 수 있습니다.
- 애플릿 내에서 프로그래밍 방식으로 AllPermission을 부여하려고 시도 할 수 있습니다.