【问题标题】:AccessController Applets IssueAccessController 小程序问题
【发布时间】:2014-02-24 23:56:32
【问题描述】:

我有一个小程序并从小程序在 Windows 上启动一些进程。 当我从另一个代码(测试)开始这个过程时,这个代码工作正常,过程从 rt.exec() 运行到 proc.destroy()。 当我使用 html 调用 applet - 进程每次只运行 5 秒(!!!)然后只是活着,但不起作用,到 proc.destroy()。 这对我来说真的很有趣(小程序中的新手)。我认为,这个问题是由 AccessController 引起的。请帮我解决这个问题(正常运行过程超过 5 秒)!提前致谢。

附:我使用 Windows,中等 Java 安全杠杆,小程序是自签名的。它要求我“允许”,小程序有效。

代码如下:

    public String startRecording(final String filename) throws IOException {
    try {
        return (String) AccessController
                .doPrivileged(new PrivilegedAction<String>() {
                    public String run() {
                        try {
                            proc = Runtime
                                    .getRuntime()
                                    .exec(cmd + filename + "." + config.getFormat());
                            //proc.waitFor();
                            return "Ffmpeg process started";
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            return e.getMessage();
                        }
                    }
                });

    } catch (Exception e) {
        return e.getMessage();
    }
}

在这里停止方法

public void stopRecording() {
    proc.destroy();
}

编辑 1: 是FFMPEG进程,记录桌面视频并写入文件,可能AccessController会阻止对文件系统的访问。

【问题讨论】:

  • 鉴于filename 可能是恶意的,这看起来不太安全。 / LiveConnect 和小程序活动完成后五秒钟是否停止?听起来像是清理失控进程的插件。所以保持小程序运行(并确定文件名)。
  • 我了解文件名。我真的不知道小程序是否正在运行,如何检查它?进程处于活动状态,但不起作用。
  • 如果我通过 Windows 命令提示符启动进程,我的进程将保持活跃并运行。这太疯狂了,帮帮我!
  • 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还要将String arg 分解为String[] args 以说明本身包含空格的参数。

标签: java security applet access-control


【解决方案1】:

您需要处理 I/O 流。只需将错误(在 ffmpeg 的情况下)流重定向到文件。这解决了问题(但不知道为什么:))。

【讨论】:

    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多