小编mac*_*vit的帖子

java应用程序(macOS Catalina)如何请求访问网络卷?

我的应用程序完全是用 java 编写的(我们从 java8 迁移到 java11)并且在 High Sierra 下运行良好:
new RandomAccessFile(file_on_network_volume, "rws")获得访问权限并继续执行。

Catalina下运行它失败了
java.io.FileNotFoundException: /Volumes/messages/xyz/FILE.xdt (Operation not permitted)

我知道任何尝试访问网络卷的应用程序都需要特殊权限,我在系统偏好设置中查看了它们,可以将它们删除以tccutil reset SystemPolicyNetworkVolumes [bundle_id]进行重复测试。

java 代码如何正确请求用户的访问权限,以便处理可以继续?

到目前为止我做了什么:

  • 将代码更改为
    AccessController.doPrivileged((PrivilegedExceptionAction<RandomAccessFile>) () -> new RandomAccessFile(file, "rws"));
    导致使用 IntelliJ 运行的 JUnitTest 通过对话
    请求权限 IntelliJ IDEA 中的应用程序请求访问网络卷上的文件

IntelliJ IDEA 中的应用程序请求访问网络卷上的文件


然后测试成功对网络卷进行了所需的操作。
效果是系统首选项中指示的权限如预期:
存在访问网络卷的权限

存在访问网络卷的权限

  • 在 Info.plist 中添加了与
    <key>NSNetworkVolumesUsageDescription</key> <string>@@bundle_name@@ benötigt Zugriff auf ein Netzwerkvolume.</string>
    显示给用户的对话框中的文本相对应的条目

但仍然缺少一些东西。应用程序请求权限,因此操作失败。IntelliJ 做了一些我目前还没有弄清楚的正确的事情。

java file-permissions disk macos-catalina

5
推荐指数
0
解决办法
91
查看次数

标签 统计

disk ×1

file-permissions ×1

java ×1

macos-catalina ×1