StaticUserAuthenticator未在VFS2中设置FTP用户名

时间:2012-09-24 13:47:16

标签: java ftp vfs apache-commons-vfs

我试图通过ApacheVFS2使用FTP连接来使用StaticUserAuthenticator - 我有以下代码:

this.fsOptions = new FileSystemOptions();
StaticUserAuthenticator auth = new StaticUserAuthenticator(null, username, password); 
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(fsOptions, auth); 
this.fsManager = VFS.getManager();

// ... later

FileObject file = fsManager.resolveFile("ftp://myhost:21/pathtofile.ext".toString(), fsOptions);
FileContent content = file.getContent();

这会导致抛出以下异常:

org.apache.commons.vfs2.FileSystemException:无法读取文件“ftp:// myhost:21 / pathtofile.ext”。 引起:sun.net.ftp.FtpLoginException:用户匿名:501使用user @ site通过代理连接

当我对此运行网络跟踪时,我看到传递给FTP服务器的用户arg是'匿名' T 10.161.37.176:57650 - > 10.152.4.138:21 [AP]   用户匿名..

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

好吧,不像我想的那么棘手

UserAuthenticator auth = new StaticUserAuthenticator("", username, password); 
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(fsOptions, auth); 
FtpFileSystemConfigBuilder.getInstance().setPassiveMode(fsOptions, true);

不确定它是否为StaticUserAuthenticator构造函数的非null第一个arg,或者是执行它的被动模式,但是这些更改可以正常工作。