0

我有一个 1/2 年前运行的小程序。现在我需要“重新激活”它,但是由于未知原因它不再工作了。以下是规格:

  • 基于 JNLP 的 NG 小程序
  • 雄猫 7
  • JRE 1.7.0_25
  • 火狐 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 回答 1

3

在这个问题上花了将近两天的时间后,我想通了,希望能帮助其他人。说明:

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

那么如何预防呢?

  1. 全局禁用tomcat中的useHttpOnly标志
  2. 禁用 web 应用程序的 useHttpOnly 标志(我这样做了)。为此,在 webappication 的 META-INF 中添加一个 context.xml 文件,其中包含以下行
    <Context path="/" cookies="true" useHttpOnly="false"/>

现在为什么 IE10 似乎忽略了 httponly 标志是一个我可以忍受的悬而未决的问题;-)

于 2013-07-25T15:55:38.143 回答