Apache commons sftp - 进入用户主目录

时间:2014-06-11 05:50:04

标签: java sftp apache-commons apache-commons-vfs

我们有一台使用以下惯例的服务器:

/pathA/Users/
/pathB/data/

当用户登录时,他们最终会找到相应的/pathA/Users/user/目录,但他们有时需要访问/pathB/data/。我想编写一个浏览器,使用sftp,让用户浏览服务器的内容(我很乐意找到一个java工具,我可以插入我的应用程序,但找不到符合我所有要求的东西) 。 我遇到的问题是apache-commons-vfs接受一个表格

的字符串
sftp://user:password@host 

并使用它来登录用户目录并将该目录视为根。结果是我无法超越该目录,在相应的getParent()上调用FileObject会返回null。我知道使用sftp over terminal可以超越用户主目录,所以我猜这是apache-commons-vfs库强加的限制。有人会碰巧知道我是否可以解决这个问题,以便可以浏览整个服务器吗?

1 个答案:

答案 0 :(得分:1)

嗯,你真的可以。检查此代码!

public class Test {

    public static void main(String[] args) throws Exception {
        FileSystemOptions opts = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
        SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, false);
        FileSystemManager fileSystemManager = VFS.getManager();
        FileObject fileObject = fileSystemManager
                .resolveFile("sftp://user:password@host/",opts);

        // foo is under SERVER ROOT not USER's!!!

        FileObject temp = fileObject.resolveFile("/foo/faa/frog/");
        FileObject fileObjects[] = temp.getChildren();

        try {
            for (FileObject j : fileObjects) {

                System.out.println(j.getName().getBaseName());
                j.close();
            }
        } finally {
            fileObject.close();
            temp.close();
        }
    }
}