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

时间:2013-05-22 08:21:28

标签: java permissions sftp file-permissions jsch

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

1 个答案:

答案 0 :(得分:3)

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

SftpATTRS.getPermissions()返回* nix权限的数字表示:
https://en.wikipedia.org/wiki/File_system_permissions#Numeric_notation

如果当前用户有权读取文件,那么它本身就不足以确定。此外,您必须知道:谁是文件的所有者(getUId返回所有者ID,但SFTP中没有用于将其映射到/来自用户名的API)以及该文件的组({ {1}},同样的。)

因此,当每个人都有权限时,您只能确保用户可以读取该文件。存在标志getGId(其他类的读取权限)可以告诉您什么。但缺少标志并不意味着用户无法读取文件,例如如果用户是文件的所有者,并且有标记0004(对所有者类的读取权限)。

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

非平凡但唯一可靠的方法是挖掘JSch源代码并提取新API以打开文件进行阅读。然后,您可以尝试打开文件(您不必实际阅读任何内容),以告知用户是否有权这样做。