我的应用程序在尝试访问我的机器上的文件时抛出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";
};