【问题标题】:Java applet permission denied, security exceptionJava 小程序权限被拒绝,安全异常
【发布时间】:2012-01-24 18:00:44
【问题描述】:

几周前我开始学习 Java,现在我正在创建一个 japplet 游戏。

我使用的是 Mac os x,每当我尝试在浏览器中运行小程序时,都会出现以下异常

java.lang.SecurityException: Permission denied:

如何解决这个问题以便 JApplet 能够运行?这些文件都在本地,我在浏览器中本地运行 JApplet。

以下是html代码

<html>
<head>
    <title>Java Game!</title>
</head>
<body>

    <applet code="/local/path/to/MainApplet.class"
            width=500
            height=500>
    </applet>

</body>
</html>

更新:

以下是完整的控制台输出:

Java.lang.SecurityException: Permission denied:
 file:/path/to/MainApplet.class
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Applet2ClassLoader.java:209)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:201)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:678)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497)
    at java.lang.Thread.run(Thread.java:680)
Exception: java.lang.SecurityException: Permission denied: file:/path/to/MainApplet.class

更新 #2

我在 Windows 中尝试了相同的代码,完全没有问题。仅在 Mac 上出现此异常,有什么想法吗?

【问题讨论】:

  • Permission denied: 之后的位是什么?您的问题的答案可能是“不要那样做”,或者“只在签名且受信任的小程序中这样做”。在你揭示“那个”是什么之前,不可能说出哪个。
  • “我几周前开始学习 Java,现在我正在创建一个 japplet 游戏。” 顺便说一句,编写小程序并不是一个好方法学习 Java GUI 编程。它们的开发和部署比(例如)从使用JWS 的链接启动的JFrame 要复杂得多。
  • @AndrewThompson 该课程要求我的应用程序部署为小程序,遗憾的是别无选择:(我还更新了 Q.
  • 1) 不要忘记为作业问题添加作业标签。 2) 责骂你的老师愚蠢到强迫人们进行小程序开发。 3) 是时候在您的描述中删除path/to 了。状态显式/精确路径。如果“匿名”路径旨在提供安全性,请更改项目设置以使路径从一开始就匿名。 4) 为便于开发,确保类与 HTML 位于同一目录中,或者如果该类在包中,则为子目录。 5)这个安全问题很可能表明小程序设置不正确。

标签: java applet japplet


【解决方案1】:

由于小程序是从 Internet 提供的组件,Java 的安全框架要求您必须对小程序进行签名才能访问本地资源,例如从硬盘写入或读取。

要签署小程序,您可以查看以下链接:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

【讨论】:

  • 小程序是否可以在不签名的情况下运行?我正处于开发初期,不得不将其捆绑到一个 jar 中并每次都对其进行签名,这实在是太多了……而且该小程序不会向公众发布,仅用于评分目的
  • @zentenk - 仅在您使用本地文件系统时适用 - 您实际上是在小程序中使用本地文件系统,还是抱怨它无法首先访问 MainApplet.class地方?听起来像后者。如果类在本地,并且 html 在本地,请尝试相对路径。 IE。将html文件放在path/to/local,并参考MainApplet.class(没有路径)
  • @James 是的,它正在使用本地文件系统。当我用相对路径引用它时,我收到一条错误消息,说它找不到类文件。我还将权限设置为 777,但仍然得到相同的结果。
  • @如果您正在学习 Java,并且不想签署 applet JAR,也许您不需要使用 Applet,您可以使用 JFrame 或 Frame 来运行您的程序。跨度>
  • @ErnestoCampohermoso 课程要求程序是一个小程序,没有办法...
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多