JavaFX - 无法使用已签名的应用程序访问文件系统

标签 java security javafx-2

我正在开发一个需要访问用户系统上的文件的 JavaFX 应用程序。我知道我的应用程序必须先签名才能获得此类访问权限,因此我签署了我的应用程序。但是应用程序仍然抛出 java.security.AccessControlException

-应用程序

public class TestApp extends Application
{
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) 
    {
         launch(args);
    }

    @Override
    public void start(Stage primaryStage) 
    {
         primaryStage.setTitle("Hello World!"); 
         StackPane root = new StackPane();
         primaryStage.setScene(new Scene(root, 300, 250));
         primaryStage.show();
    }

    public void callJSFunc(JSObject func) 
    {
         File fleExample = new File("F:/myfile.xml");
         func.call("call", fleExample.exists());
    }
}

然后我继续为应用程序签名

keytool -genkey -keystore myKeyStore -alias me
keytool -selfcert -keystore myKeyStore -alias me  
jarsigner -keystore myKeyStore TestApp.jar me

所以我从 javascript 中调用了应用程序 callJSFunc

function deployIt() 
{
      dtjava.embed(
      {
          id: "my2",
          url: "TestApp.jnlp",
          width: 300,
          height: 200,
          placeholder: "here"
       },
       { 
          javafx: "2.1+", 
           jvm: "1.6.0+" 
       },
       {
           onJavascriptReady: callApp
       });
}

function callApp(id) 
{
   var app = document.getElementById(id);
   app.callJSFunc(function(e){ alert(e); });
}

dtjava.addOnloadCallback(deployIt);

但是我的应用在浏览器上输出了这个

Uncaught Error: java.security.AccessControlException: access denied ("java.io.FilePermission" "F:/myfile.xml" "read") 

此外,我还在我的本地主机上测试了该应用程序。我不明白为什么在签署应用程序后会抛出此异常。请问我做错了什么?谢谢

最佳答案

不要使用 keytool 和 jarsigner 对应用进行签名。

而是使用 javafx deployment tools 打包、签署并准备好您的应用程序以进行部署例如 javafxpackager 或 JavaFX ant 任务。

确保您的 jnlp file requests elevated permissions .如果您使用的是 JavaFX ant 任务,则可以使用 fx:permissions 请求 JavaFX 生成具有提升权限的适当 jnlp。条款。

关于JavaFX - 无法使用已签名的应用程序访问文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882586/

相关文章:

java - 如何在ehcache.xml中配置QueryCache

css - 如何在 JavaFX 的 tabPane 中删除这个额外的空间?

java - 在 Swing 中创建可重新排列的选项卡

java - 如何在不覆盖 equals 的情况下查找重复元素

java - 如何根据点数组列表画圆?

java - iOS对称 key 加密/解密相当于Java

security - 错误 : OAuth 2 parameters can only have a single value: hd

JavaFX 循环场景图控件

java - 将项目的不同版本导入 Eclipse

security - Symfony2 扩展 DefaultAuthenticationSuccessHandler