/ / SFTP spojenie s apache vfs zlyhá, ale je úspešné s WinSCP - sftp, apache-commons-vfs

Spojenie SFTP s apache vfs zlyhá, ale je úspešné pri WinSCP - sftp, apache-commons-vfs

Úspešne sa môžem spojiť s WinSCP pomocou určitých poverení na SFTP server. Ale keď to robím z javy pomocou apache vfs, mám chybu:

Caused by: org.apache.commons.vfs2.FileSystemException: Could not connect to SFTP server at "sftp://username:***@server_addres/".
at org.apache.commons.vfs2.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:170)
at org.apache.commons.vfs2.provider.sftp.SftpFileProvider.doCreateFileSystem(SftpFileProvider.java:97)
...  22 more
Caused by: com.jcraft.jsch.JSchException: Auth fail
at com.jcraft.jsch.Session.connect(Session.java:512)
at com.jcraft.jsch.Session.connect(Session.java:183)
at org.apache.commons.vfs2.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:166)

Som skontroloval poverenia a sú to isté, ako pri pokuse o pripojenie s WinSCP. WinSCP sa môže úspešne pripojiť, ale môj java kód dostane vyššie uvedenú chybu (Auth fail).
Má niekto istý náznak, aký by mohol byť problém?
Verejná oblasť IP zariadenia, ku ktorému sa pripájam, bola pridaná k výnimkám brány firewall ako dôveryhodná adresa IP na druhej strane.
Prosím pomôžte, všetky nápady sú veľmi cenené.

so srdečným pozdravom
misamas

odpovede:

1 pre odpoveď č. 1

Problém bol v hesle. Obsahoval znak%, ktorý je špeciálnym znakom pri prechode v URI (ako pass% word).
Takže riešenie robilo UriParser.encode (sftpUri) predtým, ako ho prenieslo na metódu manager.resolveFile () ako toto (s cieľom nahradiť% znamenia hesla v URI hexadecimálnym kódom% 25):

import org.apache.commons.vfs2.provider.UriParser;
...
String sftpUri = String.format("sftp://%s:%s@%s/%s/%s", configData.getUserId(), configData.getPassword(), configData.getServerAddress(),
configData.getRemoteDirectory(), configData.getFileName());
String sftpUriEncoded = UriParser.encode(sftpUri);
FileObject remoteFile = manager.resolveFile(sftpUriEncoded, options);