我正在尝试通过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]
USER匿名
知道我在做什么错吗?
最佳答案
好吧,不像我想的那么棘手
UserAuthenticator auth = new StaticUserAuthenticator("", username, password);
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(fsOptions, auth);
FtpFileSystemConfigBuilder.getInstance().setPassiveMode(fsOptions, true);
不知道它是不是StaticUserAuthenticator构造函数的第一个非空参数,还是执行此操作的被动模式,但是通过这些更改,它是否可以工作。