【问题标题】:Signed applet loading signed jar reading file error签名小程序加载签名jar读取文件错误
【发布时间】:2013-03-14 23:13:53
【问题描述】:

我目前正在开发一款游戏,并制作了一个 JFrame 加载器,它可以从 user.home 目录加载游戏,但最近决定我也想在 web 小程序中使用它。

当我运行 JFrame 加载器时,它会成功加载游戏、检查文件并打开。 (游戏和 JFrame 均已签名) 我可以使用以下方法从 Applet 加载和调用该方法:

m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this);

但是当Applet尝试加载它时出现以下错误,它设法正常加载游戏但是当它尝试使用代码加载保存的选项时:

 File f = new File(OS.saveDir + OS.fileSeparator + "Options.keys");
    if (!f.exists()) {
        try {
            f.createNewFile();
            saveKeys();
        } catch (IOException ex) {
            Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex);
        }

它给了我以下错误:

2013 年 3 月 14 日晚上 11:10:21 core.GameEngine 运行严重:null java.security.AccessControlException:访问被拒绝 ("java.io.FilePermission" "C:\Users\Jake.Zombies\Options.keys" “读取”)在 java.security.AccessControlContext.checkPermission(未知 来源)在 java.security.AccessController.checkPermission(Unknown 来源)在 java.lang.SecurityManager.checkPermission(未知来源) 在 java.lang.SecurityManager.checkRead(Unknown Source) 在 java.io.File.exists(Unknown Source) at core.Configuration.loadKeys(Configuration.java:123) 在 core.Configuration.onStartup(Configuration.java:105) 在 core.GameEngine.run(GameEngine.java:76)

if(!f.exists()) 为 Configuration.java:123

我的问题是它在 JFrame 加载器(已签名)中加载正常,但在 Applet(已签名)中加载正常

非常感谢任何帮助,谢谢。

编辑:小程序加载器检查文件,并且可以下载最新的文件。只有当我要求我加载的游戏加载文件时才会遇到问题。

编辑2(完整加载代码):

 File folder = new File(saveDir);
        URL u = new URL("jar:" + folder.toURI().toURL() + "Zombies.jar!/");
        URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{u});
        Class c = Class.forName("Visual.GameDisplay", true, ucl);
        Method m = c.getMethod("main", String[].class, String[].class, java.sql.Connection.class, Component.class);
        m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this);

通过获取缓冲输入流然后将其写入缓冲输出流来写入。

【问题讨论】:

    标签: java security digital-signature jar-signing


    【解决方案1】:

    http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

    Applet 不允许任意文件访问。

    实际上,如果从本地磁盘加载,则会出现异常。这是如何加载的?

    【讨论】:

    • 谢谢,但我认为这只是在它们未签名的情况下,考虑到它可以制作和写入文件?
    • 我正在使用由 Netbeans 生成的“launch.html”,我添加了关于如何加载另一个 jar 的代码,以及关于如何从网络下载文件和将它们存储在文件夹中。
    【解决方案2】:

    小程序不允许访问用户文件系统。您必须将数据保存回服务器。

    【讨论】:

      【解决方案3】:

      混合受信任和不受信任的代码是一个真正的想法。你可以加载任何东西。加载代码的更安全的方法是通过javax.jnlp,自 6u10 起应可用于小程序。请注意,您应该确保在加载 jar 完成之前不引用任何类,因为您将无法使用这些类名(它不会使用单独的类加载器)。

      【讨论】:

        猜你喜欢
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2010-09-08
        • 1970-01-01
        • 2012-01-17
        • 2018-07-27
        • 1970-01-01
        相关资源
        最近更新 更多