使用jnlp时无法读取本地文件

时间:2017-05-10 14:10:26

标签: java file-permissions jnlp

我的应用程序在尝试访问我的机器上的文件时抛出java.security.AccessControlException。 从intellij运行应用程序时,可以读取文件,没问题。 当部署应用程序时,所以当通过jnlp启动应用程序时,在尝试读取文件时,我得到了AccessControlException。 (即java.security.AccessControlException访问被拒绝(" java.io.FilePermission"" C:\ Users \ jeff.g \ Z_StartMenu_Win10.mp4"" read") ) 我认为代码不会带来任何有用的信息,但这里有一个简化版本:

@Override
public void loadVideoFromFileSystem(String path, Video video, Runnable mediaLoadedListener) {
    CompletableFuture<Video> receiver = CompletableFuture.supplyAsync(loadFromFileSystem(video, path));
    if (mediaLoadedListener != null) {
        receiver.thenRun(mediaLoadedListener);
    }
}

private Supplier<Video> loadVideoFromFileSystem(Video video, String pathToLoad ) {
    Supplier<Video> supplier = () -> {
        if (pathToLoad != null) {
            try {
                if (Files.isReadable(Paths.get(pathToLoad))) {
                    video.setContent(Files.readAllBytes(Paths.get(pathToLoad)));
                }
            } catch (IOException e) {
                LOG.error("...");
            }
            catch (SecurityException e){
                LOG.error("...");
            }
        }
        return video;
    };
    return supplier;
}

,它在

上失败了
Files.isReadable(Paths.get(pathToLoad))

jnlp包含

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

我在grant部分的java.policy文件中添加了一行(仅用于测试),其中包含我文件的完整路径 e.g。

grant {
    permission java.io.FilePermission "C:\\Users\\jeff.g\\Z_StartMenu_Win10.mp4", "read,write";
}

我也试过&#34; \&#34;和&#34; /&#34; ,但这仅用于测试目的,不应修改java.policy文件以使其正常工作。

顺便说一句,我已经验证了用于签署jar的证书,它是有效的,证书是安装在我的机器和客户端机器上的,它在任何地方都失败了。

你有任何线索......

非常感谢。

修改

它看起来像沙盒问题。 我检查了我的罐子,我的所有库都正确签名了。 我还修改了javaws.policy文件以授予对文件的访问权限,但没有任何帮助。

grant {
    permission java.security.AllPermission;
    permission java.io.FilePermission "<<ALL FILES>>", "read"; 
};  

0 个答案:

没有答案