Java Applet 权限

5
我已经制作了一个基本的小程序,用户可以从硬盘中选择一个文件,该程序会读取该文件的第一行并将其传递给JavaScript进行一些附加预处理,然后当您单击按钮时,它会尝试通过HTTP POST请求上传该文件。我找到了一个非常基本的开源小程序用于上传文件,我将其复制并修改为最后一步使用。
问题是它似乎不能正常工作。它似乎在运行良好,但是我遇到了两个与权限相关的问题。Java控制台中的消息显示该小程序在以下两个权限上出现了访问被拒绝的错误:
java.lang.RuntimePermission setFactory
java.io.FilePermission read

我觉得这很奇怪,因为我在NetBeans中勾选了“自签名”选项并点击确认浏览器中的小安全弹窗时,我认为我已经授予了小程序权限。

此外,我自己编写的部分,在读取文件并将第一行传递给JavaScript时工作正常。这非常清楚地表明小程序能够从本地文件系统读取!问题出现在我实际尝试启动上传时。值得注意的是,上传过程似乎在新线程中运行,而其余部分都在主类中运行而不创建线程。

我对Java完全是新手,并且对Java中的线程知之甚少;我需要以某种方式将权限传递到这个新线程吗?还是其他什么影响?提前感谢您的帮助。

3个回答

3
你可能需要向安全管理器(代码,而非管理员)请求特权操作的权限。由于各种原因,使小程序能够打开本地文件通常不是一件好事,所以它受到了严密的保护。
基本的关键是调用 AccessController.doPrivileged(),Java Ranch FAQ 上有一个 很好的小教程

doPrivileged非常危险。签署小程序也是如此。 - Tom Hawtin - tackline
3
允许小应用程序读取文件。虽然如此,它确实存在,并且是问题的答案。 - Charlie Martin

1

我曾经遇到过类似的问题,花费了很长时间才解决。原来从JavaScript调用的小程序方法没有权限,即使你在策略文件中明确授权也是如此。

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

请确保您理解这里的危险:任何人都可以修改页面上的JavaScript并更改输入到小程序中的内容。在我的情况下,我知道代码永远不会放在Web服务器上,并且该类未签名,因此除非在策略文件授权的特定位置,否则它将失败。


0

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


问题中提到涉及JavaScript。我的猜测是访问控制上下文中的JavaScript导致了问题。 - Tom Hawtin - tackline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接