Applet停止使用JNLP MissingFieldException <jnlp> </jnlp>

时间:2013-07-25 15:05:31

标签: java applet tomcat7 jnlp next-generation-plugin

我有一个在1/2年前运行的applet。现在我需要'重新激活'它然而由于一个未知的原因它不再工作了。以下是规格:

  • 基于JNLP的NG Applet
  • Tomcat 7
  • JRE 1.7.0_25
  • Firefox 22和Chrome 28

这是我得到的错误:

MissingFieldException[ The following required field is missing from the launch file: <jnlp>]
at com.sun.javaws.jnl.XMLFormat.parse(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory._buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.initialize(Unknown Source)
at sun.plugin2.main.client.PluginMain.initManager(Unknown Source)
at sun.plugin2.main.client.PluginMain.access$200(Unknown Source)
at sun.plugin2.main.client.PluginMain$2.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Error while initializing manager: MissingFieldException[ The following required field is missing from the launch file: <jnlp>], bail out

到目前为止我尝试/怀疑的内容:

  1. 安全更新7u17,7u21或7u25引入了oracle。但是我尝试了从7u25到7u0的所有JRE,它没有帮助。还尝试了6u51到6u22,我相信之前确实工作过。
  2. Mozilla或Google推出了一些与java插件结合使用以提高浏览器安全性的东西。尝试了各种较旧的浏览器版本 - 没有成功。然而,我尝试了IE10,它正在运行?!
  3. 分析了JNLP文件(也使用了JaNeLa),但由于它之前工作并且在IE10中工作,因此它不能是JNLP。看来该插件甚至没有分析JNLP。
  4. 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在几乎花了两天时间解决这个问题后,我发现了它,希望能帮助其他人。解释:

  1. 我的applet在受保护的Web应用程序的上下文中运行,其中用户需要首先使用表单登录进行登录。
  2. 执行此操作后,会创建会话cookie并将其发送回客户端/浏览器。
  3. 由于我从tomcat 6切换到tomcat 7,默认情况下启用了useHttpOnly policy的cookie,对于Tomcat 7之前的所有tomcat版本都禁用了。{HttpOnly标志指示浏览器阻止从JavaScript /插件访问这些cookie (安全原因,例如跨站点脚本等)。
  4. 现在由于java插件无法访问cookie,因此在请求JNLP文件时它没有将其发送到服务器。
  5. 服务器返回所有未经授权的请求的登录页面。
  6. 最后但并非最不重要的是,JNLP解析器正在寻找<jnlp>结构,但找不到任何结构 - 因此产生了上述错误。
  7. 那怎样才能防止这种情况?

    1. 全局禁用tomcat中的useHttpOnly标志
    2. 禁用web应用程序的useHttpOnly标志(我做过)。为此,在webappication的META-INF中添加一个context.xml文件,其中包含以下行 <Context path="/" cookies="true" useHttpOnly="false"/>
    3. 现在为什么IE10似乎忽略了httponly标志是一个我可以忍受的开放性问题; - )