如何使用JSch和SFTP协议检查读取权限?

3
我知道有getPermissions()方法,但我不知道如何使用它。我该如何使用JSch检查用户是否可以读取文件?
1个回答

3
首先,您通常应该提出一个功能性问题(您想要实现什么),以获得有用的答案。您询问了一些实现/技术细节,因此我的技术回答可能没有用:
SftpATTRS.getPermissions()返回*nix权限的数字表示:
https://en.wikipedia.org/wiki/File-system_permissions#Numeric_notation
这本身是不足以确定当前用户是否具有读取文件的权限的。此外,您还需要知道:谁是文件的所有者(getUId返回所有者ID,但在SFTP中没有API将其与用户名映射)以及文件的组是什么(getGId也是如此)。因此,只有在每个人都有读取文件的权限时,您才可以确定用户可以读取文件。您可以通过标志0004(其他类的读取权限)的存在来判断。但缺少该标志并不意味着用户无法读取文件,例如,在用户是文件所有者且存在0400(所有者类的读取权限)标志的情况下。

请注意,当远程系统不是*nix(例如Windows)时,getPermissions()值通常是无关紧要的。

非平凡的但唯一可靠的方法是深入研究JSch源代码并提取新的API来打开文件进行读取。然后,您可以尝试只打开文件(实际上不必读取任何内容),以确定用户是否有权限这样做。

总的来说,检测您是否具有执行操作的权限是没有意义的。尝试进行操作并查看其是否成功即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接