【问题标题】:Java Web Start app logging permission deniedJava Web Start 应用程序日志记录权限被拒绝
【发布时间】:2018-07-30 23:37:05
【问题描述】:

我的 java 应用程序可以独立运行。但是当我将它作为 Java Web Start 应用程序运行时,它会启动,但在我单击某个按钮时会失败。我不知道如何调试它,所以我想我会添加日志记录。这导致权限被拒绝错误,甚至无法启动。

为了尝试解决这个问题,我添加了

permission java.util.logging.LoggingPermission "control"

到 C:\Program Files\Java\jre1.8.0-171\lib\security\java.policy 文件和 C:\Program Files\Java\jdk1.8.0-171\jre\lib\security\java .policy 文件。重新启动 Apache HttpServer 并再次尝试。结果一样。

接下来我在相同的两个文件中添加了以下行:

permission java.security.AllPermission;

同样的结果。

接下来我对 jar 文件进行了自签名。结果一样。

接下来我添加了

<security><all-permissions/></security>

动态生成的 .jnlp 文件。这次我收到一条新消息: “未签名的应用程序请求不受限制地访问系统”

jarsigner 验证确认 jar 文件已签名:

jarsigner -verify myjarfile.jar

jar 已验证。

我不知道还能尝试什么。有什么建议吗?

【问题讨论】:

    标签: java java-web-start java-security


    【解决方案1】:

    首先,需要有一个“;”在“控制”之后。我不知道这本身是否会解决问题,但我在日志文件中发现了一个解析错误。同时,我已将所有“记录器”命令改回 System.out.println 命令。

    接下来,我在 Java 控制面板的“高级”选项卡中选中了“启用跟踪”和“启用日志记录”。

    然后,在 DOS shell 中,我导航到 myjnlp.jnlp 文件的位置并输入以下命令:

    set JAVAWS_TRACE_NATIVE=1
    set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    javaws myjnlp.jnlp
    

    这导致在 C:\Users\Greg\AppData\LocalLow\Sun\Java\Deployment\log 的主目录中创建日志文件 然后我可以看到发生了什么。

    不幸的是,这是一个新问题。见以下代码:

        File source = new File(localFilename);
        File dest = new File("C:/E360/CadIntegration/" +localFilename);
        try {
            Files.copy(source.toPath(),dest.toPath());
            msg = "Because IP was blank, file was copied to C:/E360/CadIntegration";
        } catch (IOException ex) {
            msg = "problem copying " +source.toPath() +" to " +dest.toPath();
            System.out.println("uploadCadChanges: " +msg +", IOException is "+ex.getMessage());
        }
    

    如果我使用 javaws 运行应用程序,它可以完美运行,文件被成功复制。但是,如果我从网页运行它,它会因 IOException 而失败,而 ex.getMessage() 只会显示“CadChanges.txt”。真的很有帮助。

    我找到了原因。从网页运行时,当前工作目录更改为 current dir = C:\Program Files (x86)\Google\Chrome\Application\67.0.3396.99 但从 javaws 运行时,它不是。解决方案是通过参数标签将当前目录传递给 .jnlp 文件,并让应用程序将 cwd 更改为它。

    【讨论】:

    • 不幸的是,出现了一个新问题。虽然这可以完美地使用 javaws,但当被网页调用时它会失败。请参阅上面的编辑。
    • 从网页运行时,当前工作目录更改为当前目录 = C:\Program Files (x86)\Google\Chrome\Application\67.0.3396.99。难怪它找不到具有相对路径的文件!
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 2011-06-11
    • 2018-01-09
    • 2017-09-06
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多