【问题标题】:Applet stopped working with a JNLP MissingFieldException <jnlp>小程序停止使用 JNLP MissingFieldException <jnlp>
【发布时间】:2013-07-25 13:36:19
【问题描述】:

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

  • 基于 JNLP 的 NG 小程序
  • 雄猫 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 分析都没有。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    那么如何预防呢?

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

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

    【讨论】:

    • 其他解决方案。如果您在 Java 控制台临时文件中禁用,则必须再次将其打开。如果您不保留临时文件,它将无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多