2014-06-11 3 views
1

У нас есть сервер, который использует следующее соглашение:Apache Commons SFTP - перейти выше домашней директории пользователя

/pathA/Users/ 
/pathB/data/ 

Когда пользователи войти они в конечном итоге в соответствующем /pathA/Users/user/ директории, но иногда они должны получить доступ к /pathB/data/. Я хочу написать браузер, который, используя sftp, позволит пользователям просматривать содержимое сервера (я был бы рад найти инструмент Java, который мог бы просто подключиться к моему приложению, но не смог найти ничего, что бы соответствовало всем моим требованиям) , У меня есть проблема в том, что apache-commons-vfs принимает строку формы

sftp://user:[email protected] 

и использует для входа в каталог пользователя и рассматривать этот каталог в качестве корня. Эффект в том, что я не могу выйти выше этого каталога, вызвав getParent() по соответствующим FileObjectnull. Я знаю, что можно сделать шаг выше домашней директории пользователя, используя sftp over terminal, поэтому я предполагаю, что это ограничение, налагаемое библиотекой apache-commons-vfs. Кто-нибудь, возможно, узнает, смогу ли я обойти эту проблему, чтобы можно было просматривать весь сервер?

+0

* просмотр всего сервера * ... вы уверены? вы всегда можете использовать SSH на сервере. – Raptor

+0

Я точно понимаю, но мне нужен доступ к некоторым серверам вне пользовательских dirs. Вся суть приложения заключается в том, чтобы облегчить жизнь пользователям, которые начинают трястись при звуке слова «терминал», поэтому я не хочу, чтобы у них было dab в ssh. И я могу получить функциональность, я хочу использовать ssh из своего кода, но надеюсь найти библиотеку, которая избавит меня от усилий по кодированию. – Puchatek

+0

Должен ли кто-нибудь в будущем быть заинтересованным: я смог получить необходимую функциональность с помощью SSHJ StatefulSFTPClient, хотя это немного работа, так как ее документация немного скудна. – Puchatek

ответ

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:[email protected]/",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(); 
     } 
    } 
} 
+0

Ха, я никогда не думал о том, чтобы просто попробовать абсолютный путь. Умная. – Puchatek

Смежные вопросы