2014-10-15 7 views
0

동일한 서버의 다른 포트에 연결하려는 웹 페이지에서 샌드 박스 애플릿 (Java 8u25)을 사용하고 있습니다.Java에서 crossdomain.xml 검사를위한 연결 시간 초과 설정

이전 버전의 Java-Version (이전 8)에서는 아무 문제없이 작동했습니다.

java 8의 경우 이러한 종류의 액세스는 크로스 도메인 액세스로 간주되므로 대상 포트에 crossdomain.xml을로드하려고 시도합니다.

하지만이 경우이 포트는 HTTP (우리 자신의 바이너리 데이터 프로토콜)를 처리하지 않으며 요청에 대해 적절하게 응답하지 않습니다.

애플릿에 해당 상황에 대한 시간 제한이 없으므로 요청이 CrossDomainXML.check() 호출에서 중단 된 것 같습니다. 다른 방법으로 어떻게 든 연결 시간 제한을 설정하거나 할 수있는 방법이 거기에이 문제를 해결하기 위해 crossdomain.xml 파일이 체크 영향인가

at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(Unknown Source) 
at java.net.SocketInputStream.read(Unknown Source) 
at java.io.BufferedInputStream.fill(Unknown Source) 
at java.io.BufferedInputStream.read1(Unknown Source) 
at java.io.BufferedInputStream.read(Unknown Source) 
- locked <0x058c2288> (a java.io.BufferedInputStream) 
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) 
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) 
- locked <0x058c2328> (a sun.net.www.protocol.http.HttpURLConnection) 
at sun.net.www.protocol.http.HttpURLConnection.access$200(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection$9.run(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection$9.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessController.doPrivileged(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
- locked <0x058c2328> (a sun.net.www.protocol.http.HttpURLConnection) 
at com.sun.deploy.net.CrossDomainXML.check(Unknown Source) 
at com.sun.deploy.net.CrossDomainXML.check(Unknown Source) 
at sun.plugin2.applet.SecurityManagerHelper.checkURLPermissionHelper(Unknown Source) 
at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.URLtoSocketPermission(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
at myCode calling new URL("http://...").openConnection().connect(); 

: 여기

이 붙어 애플릿의 스레드 덤프에서 스택입니다 ?

편집 : 방금 ​​더 악한 것으로 나타났습니다 : 일단이 호출이이 시점에서 멈 추면 (스레드를 죽이더라도) 아무런 호출도 성공적으로 수행 할 수 없습니다. 나는 특정 자물쇠가 열리고 붙어 있던 실을 중단하거나 멈추더라도 막히지 않기다는 것을 믿는다. (인터럽트() 전혀 효과가없는 것 같다.)

이 같은 글로벌 연결 시간 제한은 샌드 박스 애플릿에서 허용되지 않습니다 또한 설정 :

System.setProperty("sun.net.client.defaultReadTimeout", "2000"); 
System.setProperty("sun.net.client.defaultConnectTimeout", "2000"); 

그러나 그들을 설정하는 시도 가치가있을 수도 있습니다 외부에서 VM 매개 변수를 통해.

답변

0

나는 샌드 박스 애플릿을 사용 입니다 에 노력하고있다 (자바 8u25 [+/-]) 웹 페이지에서같은 서버에 다른 포트에 연결합니다.

이것은 더 이상 가능하지 않습니다.

오라클이 동작을 변경했지만 (항상 그렇듯이) 해당 사이트에서이 주제에 대한 메시지를 발견하지 못했습니다.

Java 8 업데이트 25의 배포 당시와 같이 효과가있는 것 같습니다. 하지만 새 Plugin에서 호출 된 이전 Java-Install에도 영향을 미칩니다.

모든 권한에 대한 사용 권한을 변경 (또는 도입)해야합니다. 그리고 이것은 애플릿 호출 스크립트, jnlp-file, Manifest, Applet-Viewer에서 샌드 박스로 정의 될 수 있다는 것을 명심하십시오.