我知道有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 以打开文件进行阅读。然后,您可以尝试打开文件(您实际上不必阅读任何内容)来判断用户是否有权这样做。
一般来说,如果您有操作权限,那么尝试检测是没有意义的。尝试操作,看看是否成功。