Apache commons位于用户主目录之上



我们有一个使用以下约定的服务器:

/pathA/Users/
/pathB/data/

当用户登录时,他们最终在各自的/pathA/Users/user/目录,但他们有时需要访问/pathB/data/。我想写一个浏览器,使用sftp,将让用户浏览服务器的内容(我很高兴找到一个java工具,我可以只是插入到我的应用程序,但未能找到任何符合我所有的要求)。我的问题是,apache-commons-vfs接受形式的字符串

sftp://user:password@host 

并使用它登录到用户目录,并且将该目录视为根目录。效果是,我不能跳过这个dir,调用getParent()对应的FileObject返回null。我知道在终端上使用sftp可以跳过用户主目录,所以我猜这是apache-commons-vfs库施加的限制。有没有人知道我能不能绕过这个问题让整个服务器都能浏览?

其实可以。检查这段代码!

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();
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新