【问题标题】:Java Applet PermissionsJava 小程序权限
【发布时间】:2010-10-11 19:59:48
【问题描述】:

我整理了一个基本的小程序,用户从他们的硬盘驱动器中选择一个文件,它读取该文件的第一行并将其传递给 JavaScript 进行一些额外的预处理,然后当您单击一个按钮时它会尝试通过 HTTP POST 请求上传该文件。我找到了一个非常基本的开源小程序,用于上传我为最后一点复制和修改的文件。

但问题是,它并不完全奏效。看起来它运行良好,但后来我遇到了两个与权限相关的障碍。 Java 控制台中的消息表明该小程序在以下两个权限上存在访问被拒绝错误:

java.lang.RuntimePermission setFactory
java.io.FilePermission read

我觉得这很奇怪,因为我认为当我使用 NetBeans 中选中的“自签名”选项构建小程序时,我已经授予了对小程序的权限,然后单击以确认浏览器中的小安全弹出窗口。

另外,我自己编写的部分,它读取文件并将第一行传递给 JavaScript 工作正常。这是一个非常明确的指标,表明小程序能够从本地文件系统读取!直到我真正尝试开始上传,麻烦才开始。我想需要注意的一件事是,上传过程似乎在一个新线程中运行,而其余部分都在主类中运行而没有创建线程。

我是一个 Java 新手,对 Java 中的线程知之甚少;我是否需要以某种方式将权限传递给这个新线程?或者有什么效果? 提前致谢。

【问题讨论】:

    标签: java upload permissions applet


    【解决方案1】:

    您可能需要向安全管理员(代码,而不是管理员)询问执行特权操作的权限。由于各种原因,小程序能够打开本地文件通常不是一件好事,因此它受到了相当严格的保护。

    基本的关键是致电AccessController.doPrivileged(),Java Ranch FAQ 上有一个good little tutorial

    【讨论】:

    • doPrivileged 非常危险。就像签署小程序一样。
    • 允许小程序读取文件。尽管如此,它就在那里,并且是问题的答案。
    【解决方案2】:

    我有一个类似的问题,需要很长时间才能解决。事实证明,从 JavaScript 调用的 applet 方法没有权限,即使您在策略文件中明确授予它们。

    此解决方法对我有用(将命令添加到小程序循环通过的队列): http://blog.carrythezero.com/?p=5

    确保您了解此处的危险:任何人都可以修改页面上的 JavaScript 并更改输入到小程序中的内容。就我而言,我知道代码永远不会在网络服务器上运行,并且该类是未签名的,因此除非在我的策略文件授予的特定位置,否则它将失败。

    【讨论】:

      【解决方案3】:

      这可能是因为 JavaScript 未签名。我强烈建议不要签署代码,特别是如果你不知道自己在做什么。从 6u10(尚未在 Mac 上)开始,小程序可以使用 JNLP,包括 FileOpenService,因此您不必签名。

      【讨论】:

      • 问题是涉及到 JavaScript。我有根据的猜测是它在访问控制上下文中的 JavaScript 导致了问题。
      猜你喜欢
      • 2014-03-22
      • 2011-08-18
      • 2013-09-07
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      相关资源
      最近更新 更多