java.security.AccessControlException:在未签名的小程序中拒绝访问(java.io.FilePermission)

java.security.AccessControlException:在未签名的小程序中拒绝访问(java.io.FilePermission),java,security,applet,local-files,Java,Security,Applet,Local Files,我无法从未签名的小程序访问本地文件。我读过很多不同的资源(oracle、sun文档、论坛,包括stackoverflow),他们都告诉我,我可以修复安全策略,而不是签署小程序 我想做的是播放.wav文件。为了简化,我将所有文件放在同一个目录中: D:\<username>\IdeaProjects\SimpleAppletTest\out\production\SimpleAppletTest 我使用policytool创建的文件.java.policy具有以下内容: /* AUT

我无法从未签名的小程序访问本地文件。我读过很多不同的资源(oracle、sun文档、论坛,包括stackoverflow),他们都告诉我,我可以修复安全策略,而不是签署小程序

我想做的是播放.wav文件。为了简化,我将所有文件放在同一个目录中:

D:\<username>\IdeaProjects\SimpleAppletTest\out\production\SimpleAppletTest
我使用
policytool
创建的文件
.java.policy
具有以下内容:

/* AUTOMATICALLY GENERATED ON Fri Mar 13 20:44:28 MSK 2015*/
/* DO NOT EDIT */

grant codeBase "file:/D:/<username>/IdeaProjects/-" {
  permission java.io.FilePermission "<<ALL FILES>>", "read";
};
但当我在Internet Explorer中启动我的小程序时(请不要开玩笑,我只是用它来测试我的小程序),我在java控制台中还有下一个stacktrace:

Java Plug-in 11.31.2.13
Using JRE version 1.8.0_31-b13 Java HotSpot(TM) Client VM
User home directory = D:\<username>

实际上,我有Windows7。再一次,我只是尝试播放.wav文件,而不签署我的小程序

虽然我知道您想这样做,但这是一个非常非常糟糕的主意,因为您提供了对任何applet的访问,以访问磁盘上的任何文件。这就是为什么通常不允许这样做的原因。话虽如此,请确保applet.policy文件位于JDK和JRE中。一个更好的选择可能是使用java的WebStartOP——没有人会考虑使用IE作为笑话,你可以自由地询问/实验这个地球上可用的各种资源。但是,正如@MadProgrammer所解释的,允许访问所有位置的代码库的想法是一个非常糟糕的想法@MadProgrammer,在我研究了
java.policy
语法的工作原理时,我提供了对任何小程序的访问,这些小程序只位于
文件:/D://IdeaProjects/
的子目录中,以访问我磁盘上的任何文件。我的意思是,根本没有任何小程序。关于
applet.policy
,我根本没有这样的文件名。。。至于您关于WebStart的想法,我很乐意使用它,但不幸的是,我的订购客户想要的正是applet@谢克哈苏曼,谢谢你的意见。但是,尽管这是一个糟糕的想法,它仍然应该有效!但事实并非如此,因此我对此感到非常困惑,并决定在stackoverflow上发布一个问题。
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3=file:/D:/<username>/IdeaProjects/SimpleAppletTest/out/production/SimpleAppletTest/.java.policy
Java Plug-in 11.31.2.13
Using JRE version 1.8.0_31-b13 Java HotSpot(TM) Client VM
User home directory = D:\<username>
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied ("java.io.FilePermission" "D:\<username>\IdeaProjects\SimpleAppletTest\out\production\SimpleAppletTest\01.wav" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
    at SimpleApplet$1$1.run(SimpleApplet.java:56)
    at java.security.AccessController.doPrivileged(Native Method)
    at SimpleApplet$1.run(SimpleApplet.java:33)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
 AccessController.doPrivileged(new PrivilegedAction() {
                    public Object run() {
                        File audioSource = new File(
                                "D:\\<username>\\IdeaProjects\\SimpleAppletTest\\out\\production\\SimpleAppletTest",
                                "01.wav");

                        FilePermission perm = new FilePermission(audioSource.getAbsolutePath(), "read");

                        SecurityManager appsm = System.getSecurityManager();
                        appsm.checkPermission(perm);

                        return null;
                    }
                });
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)