Java Applet不起作用。

4
一个客户发现我们的Java小程序之一不再工作了。然而,我们无法确定问题所在。
规格
该Web应用程序是tiparlo。它用于记录和组织口语,并主要用于学校培训语言并存储以供以后评估。该应用程序由HTML界面组成,由JavaScript管理。声音播放和录制通过内部开发的Java小程序完成。正如您在测试页面上看到的那样,小程序本身处于工作状态。
但是,在tiparlo中,小程序(以下称为soundrecorder)没有预加载的声音文件。由于tiparlo由多个声音文件组成,JavaScript告诉soundrecorder播放哪个文件。例如,如果您想播放foo.ogg,javascript会告诉soundrecorder播放http://url/path/foo.ogg
这已经工作了几年,但现在不行了。

缺陷跟踪

问题在于它在某些条件下确实可以工作。例如,它可以在我们的本地开发机器和公共测试环境中工作。但对于我们的客户来说,它停止工作了。

工作示例:http://test.s2.olefa.com/cgi-bin/apps/tiparlo?projectid=3&mode=viewer
不工作的示例:http://www.ecoles-dudelange.lu/cgi-bin/apps/tiparlo?projectid=1594&mode=viewer

一些有用的事实:

  • 两个示例都在同一台服务器上运行

  • Java小程序、JS代码、HTML解析器和源代码都是共享资源。因此,这两个示例运行的是完全相同的代码。

  • 与问题相关的文件是:soundrecorder.js和jrecord.jar。 play 命令在 soundrecorder.js 的第 112 行。

我们现在知道了什么

  • 浏览器对于不工作的示例有不同的反应。Safari/Mac可以正常播放。然而,Safari/Win在播放时会冻结。Firefox 4则根本无法播放。Firefox 3.5/Mac又可以正常播放。然而,Firefox3.5/Win则根本无法播放。IE9也有同样的问题。Chrome也是一样。Opera直接崩溃并需要重新启动。我们还没有找到在Linux上可以正常播放不工作示例的浏览器。需要澄清的是:在所有平台上,工作示例都可以在所有浏览器上正常运行,除了Safari/Win(呃)。更新:这取决于Java版本。使用Java 6.20,所有不工作的示例都可以在所有浏览器上运行。使用Java 6.24,只有工作示例可以运行。

  • 我们尝试使用非工作示例的替代服务器URL(webX.sX.olefa.com),该URL与工作示例类似。但这次尝试失败了。

  • 我们尝试使用soundrecorder的相对路径(例如/path/foo.ogg)。

  • 我们尝试将Java更新到最新版本。

  • 我们尝试以不同的方式访问小程序。

  • 6个月前,我们遇到了类似的问题,那是由Java更新引起的。我们尝试在拥有较旧Java版本的VM上运行不工作的示例。这次可以正常运行。然而,我们怀疑仅仅是Java导致问题,因为相同的Java版本/浏览器可以在工作示例上正常运行。

  • soundrecorder只会拒绝通过JS动态加载的文件。如果在初始化时加载文件,则没有错误。

  • 小程序本身已被加载。您可以通过给它设置宽度/高度来使其可见。我怀疑Java/JS之间存在问题(JS告诉Java要播放什么,但通信出现了故障?)。然而,目前还无法确认。

一般来说,我们无法找出在完全相同的条件下运行相同代码为什么在一个网站上可以工作,而在另一个网站上不行。

解决方案

解决方案在评论中。问题和解决方案可以在这里找到。感谢Ryan指出正确的方向。

1个回答

4
我正在使用Windows上的FF4(Java 1.6.0_24),并成功在http://www.ecoles-dudelange.lu/cgi-bin/apps/tiparlo?projectid=1594&mode=viewer上看到了该小程序。

然而,当我单击页面底部的大蓝色播放图标时,按钮上方的所有表情符号似乎都在“墨西哥风浪”式地闪光。令人印象深刻 :)

我查看了Java小程序控制台,并注意到一旦单击了该按钮,就会出现以下错误:

network: Cache entry not found [url: http://www.ecoles-dudelange.lu/resources/audio/_tiparlo_1594/ismael_20110405_11-17-47_3129344.ogg, version: null]
network: Connecting http://www.ecoles-dudelange.lu/resources/audio/_tiparlo_1594/ismael_20110405_11-17-47_3129344.ogg with proxy=DIRECT
network: Cache entry not found [url: http://85.119.157.43/crossdomain.xml, version: null]
network: Connecting http://85.119.157.43/crossdomain.xml with proxy=DIRECT
network: Connecting http://85.119.157.43:80/ with proxy=DIRECT

java.security.AccessControlException: access denied (java.net.SocketPermission 85.119.157.43 resolve)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at lu.educdesign.audio.gui.JRecordApplet.load(Unknown Source)

该URL地址为http://85.119.157.43/crossdomain.xml,加载一个HTML页面并重定向至http://confixx.s2.olefa.com,要求输入用户名和密码。

也许有一个很好的解释,但乍一看,这可能会有问题。


confixx听起来像是配置错误。但是我可以通过浏览器访问该文件。我会进一步调查。至少我们现在有了一个有效的线索。谢谢,伙计。 - Mike
"然而,我可以通过浏览器访问该文件。" - 尝试清除您的Cookie并查看是否仍然可以访问它。 - Ryan Fernandes
是的,仍然有效。但是在您的帮助下,我在这里找到了一个类似的问题:https://dev59.com/Gm855IYBdhLWcg3wz3zo。所有症状都匹配。 - Mike
我很想知道你是通过哪种方法解决了CVE-2010-3560提出的4个解决方案中的问题。 - Ryan Fernandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接