java - Applet 因 JNLP MissingFieldException <jnlp> 停止工作

标签 java applet tomcat7 jnlp next-generation-plugin

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

  • 基于 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. Oracle 在安全更新 7u17、7u21 或 7u25 中引入的内容。但是我尝试了从 7u25 到 7u0 的所有 JRE,但没有帮助。还尝试过从 6u51 降到 6u22,我确信之前确实有效。
  2. Mozilla 或 Google 为了提高浏览器的安全性而引入的一些东西,与 java 插件相结合。尝试了各种较旧的浏览器版本 - 没有成功。但是后来我尝试了 IE10,它可以正常工作?!
  3. 分析了 JNLP 文件(也使用 JaNeLa),但由于它之前确实可以工作并且可以在 IE10 中工作,所以它不可能是 JNLP。看来这个插件甚至没有来分析 JNLP。

有什么想法吗?

最佳答案

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

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

那么如何防止这种情况发生呢?

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

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

关于java - Applet 因 JNLP MissingFieldException <jnlp> 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17861759/

相关文章:

java - 如何修复此 Oauth 2.0 重定向错误

java - 有没有办法从 applet 本身重新加载/刷新 java applet?

java - apache和tomcat获取远程ip

java - 从 Richfaces-4.1.0.Final 迁移到 Richfaces-4.3.2.Final

java - 从 JSP 调用 Tomcat 7 方法

java - Java 中文本未与 JLabel 中心对齐

java - Elasticsearch-从2.x升级到7.x-使用TransportClient和Jest进行双重写入

java - 如何在 SWT 小部件旁边显示错误标记?

java - 我尝试在网页上查看小程序时收到 "class not found"错误

java - 小程序中的按键故障