【问题标题】:Deleting files from signed java applet从签名的 Java 小程序中删除文件
【发布时间】:2013-08-02 09:40:33
【问题描述】:

当他退出应用程序时,我必须从用户系统中删除一些临时文件。该应用程序有小程序。小程序 jar 已签名。我正在遵循调用applet的destroy方法来删除文件的策略。我正在通过javascript调用applet的destroy方法 像 document.myApplet.destroy() 。调用它后,我在浏览器上收到错误

未捕获错误:java.security.AccessControlException:访问被拒绝(java.io.FilePermission 未捕获错误:调用 NPObject 方法时出错。

【问题讨论】:

  • 我认为你的销毁方法是私有的什么的。
  • 不,我的 destory 方法不是私有的,我发现当用户退出时它没有被 chrome 调用!
  • 但它适用于其他浏览器?
  • 请看我的代码: public void destroy() { String tempFolder = System.getProperty("java.io.tmpdir");字符串 cacheFolder = tempFolder+"/AppCache";文件文件 = 新文件(缓存文件夹); if(file.exists() && file.isDirectory()){ deleteDirectory(cacheFolder); } }
  • 你的代码是无可挑剔的,只要deleteDirectory做它应该做的事情。

标签: java applet sign


【解决方案1】:

好吧,我自己得到了答案:在参考了这个链接http://docs.oracle.com/javase/7/docs/api/java/security/AccessController.html之后,我发现可以通过将它们包装在 AccessController.doPrivileged 方法中来完成读取、写入甚至删除。

AccessController.doPrivileged(new PrivilegedAction() {

                @Override
                public Object run() {
                    try {
                        deleteAppCacheDirectory();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

            });

【讨论】:

    【解决方案2】:

    您应该从您的 javascript 代码中删除对 destroy 方法的调用。当用户离开页面时,浏览器会自动调用destroy方法。发生这种情况的原因可能是因为您的 destroy 方法不是公开的。然而,这并不妨碍浏览器调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2014-08-15
      • 2014-12-04
      • 2013-04-21
      • 1970-01-01
      • 2013-04-28
      • 2021-11-12
      相关资源
      最近更新 更多