java - 如何使用带有 SFTP 协议(protocol)的 JSch 检查读取权限?

标签 java permissions sftp file-permissions jsch

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

最佳答案

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

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

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

关于java - 如何使用带有 SFTP 协议(protocol)的 JSch 检查读取权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686858/

相关文章:

java - 如何使用 java 日志记录将消息记录在单独的日志文件中?

java - 同时选择2个JTextarea中的文本

linux - 在 linux/bsd 工作站上与不同用户共享目录

windows - Perl - 无法在 Windows 上安装 Net::SSH2

Java Android XML 资源/引用整数数组

java - 为什么 new FileWriter ("abc.txt") 创建一个新文件而 new File ("abc.txt") 不创建?

php - 在 OS X 中将 PhantomJS 作为守护进程运行

java - 询问倍数权限android 6.0

python - 如何通过 Paramiko 获取目录中所有 SFTP 文件的大小

Windows 上的 Git bash - 不支持 sftp