如何使用带有 SFTP 协议的 JSch 检查读取权限?

Posted

技术标签:

【中文标题】如何使用带有 SFTP 协议的 JSch 检查读取权限?【英文标题】:How to check for read permission using JSch with SFTP protocol? 【发布时间】:2013-05-17 05:09:44 【问题描述】:

我知道有getPermissions() 方法,但我不知道如何使用它。如果用户可以读取文件,如何使用 JSch 检查?

【问题讨论】:

【参考方案1】:

首先,您通常应该问一个功能性问题(您想达到什么目标),以获得有用的答案。您要求提供实施/技术细节,因此我可能无用的技术答案:

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 以打开文件进行阅读。然后,您可以尝试打开文件(实际上您不必阅读任何内容)来判断用户是否有权这样做。

一般来说,如果您有操作权限,则尝试检测是没有意义的。尝试操作,看看是否成功。

【讨论】:

以上是关于如何使用带有 SFTP 协议的 JSch 检查读取权限?的主要内容,如果未能解决你的问题,请参考以下文章

jsch上传(基于sftp协议)

如何使用jcraft 模拟SFTP登陆

jsch的sftp在多线程下的问题及处理办法

如何在使用 JSch SFTP 库时解决 Java UnknownHostKey?

JSch - Java实现的SFTP(文件上传详解篇)

JSch - Java实现的SFTP(文件上传详解篇)