Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序权限_Java_Upload_Permissions_Applet - Fatal编程技术网

Java小程序权限

Java小程序权限,java,upload,permissions,applet,Java,Upload,Permissions,Applet,我制作了一个基本的小程序,用户从硬盘上选择一个文件,它读取该文件的第一行并将其传递给JavaScript进行一些额外的预处理,然后当你点击一个按钮时,它试图通过HTTP POST请求上传该文件。我发现了一个非常基本的用于上传文件的开源小程序,我在最后一点复制和修改了这些文件 但问题是,它不太管用。看起来它运行得很好,但后来我遇到了两个与权限相关的障碍。Java控制台中的消息表示小程序在以下两个权限上存在拒绝访问错误: java.lang.RuntimePermission setFactory

我制作了一个基本的小程序,用户从硬盘上选择一个文件,它读取该文件的第一行并将其传递给JavaScript进行一些额外的预处理,然后当你点击一个按钮时,它试图通过HTTP POST请求上传该文件。我发现了一个非常基本的用于上传文件的开源小程序,我在最后一点复制和修改了这些文件

但问题是,它不太管用。看起来它运行得很好,但后来我遇到了两个与权限相关的障碍。Java控制台中的消息表示小程序在以下两个权限上存在拒绝访问错误:

java.lang.RuntimePermission setFactory
java.io.FilePermission read
我觉得这很奇怪,因为当我在NetBeans中使用“自签名”选项构建applet时,我认为我已经授予了它权限,然后单击确认浏览器中的小安全弹出窗口

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

我是Java的新手,对Java中的线程知之甚少;我是否需要以某种方式将权限传递给这个新线程?或者类似的东西?
提前感谢。

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


基本的关键是调用AccessController.doPrivileged(),Java Ranch FAQ上有一个关于它的问题。

这可能是因为JavaScript没有签名。我强烈建议不要签署代码,尤其是当您不知道自己在做什么的时候。从6u10(尚未在Mac上)开始,小程序可以使用JNLP,包括FileOpenService,因此您无需签名。

我遇到了一个类似的问题,这个问题花了很长时间才解决。事实证明,从JavaScript调用的小程序方法没有权限,即使您在策略文件中显式授予它们

这个解决方法对我很有效(将命令添加到小程序循环通过的队列中):


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

问题是涉及JavaScript。我有根据地猜测,导致问题的访问控制上下文中的JavaScript.doPrivileged非常危险。签名小程序也是如此。允许小程序读取文件也是如此。尽管如此,它仍然在那里,而且是问题的答案。