5

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

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

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

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

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

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

4

3 回答 3

3

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

基本的关键是打电话, Java Ranch FAQ 上AccessController.doPrivileged()有一个很好的小教程。

于 2009-03-06T19:53:20.680 回答
1

我有一个类似的问题,需要永远解决。事实证明,从 JavaScript 调用的小程序方法没有权限,即使您在策略文件中明确授予它们。

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

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

于 2011-01-14T20:11:53.447 回答
0

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

于 2009-03-06T20:33:34.500 回答