我正在尝试使用 Camel FTP Producer 将文件发送到第三方 ftp 服务器(似乎由 Amazon 托管),并且遇到了一个问题Writing File failed with: File operation failed... Host attempting data connection x.x.x.x is not the same as server y.y.y.y
我以前没见过。
生产者配置为被动模式,根据 TRACE 级别的日志,该模式已启用。 (尽管错误消息听起来更多地与活动模式问题相关)
The y.y.y.y
IP 地址是 nslookup 为目标域列出的地址之一,因此该位有意义。但是,那x.x.x.x
IP 与不同的 Amazon 托管服务器相关,因此我推测已经执行了某种交接或负载平衡,而 FTP 客户端不喜欢这样。
是否有某种方法可以配置 Camel FTP 以允许此操作(我假设这是一项安全功能),或者被动模式是否应该允许此操作?
我对 ftp 服务器提供商没有任何影响,因此不幸的是,除了我的客户端选项之外,我无法更改任何内容。
感谢您的关注!
经过一番挖掘和 grep Apache Commons FTP 的源代码后,出现问题的消息是由客户端中的验证引起的,该验证检查被动模式连接是否与初始服务器连接相同。
鉴于这似乎是一个负载平衡系统,被动模式数据连接是与目标 IP 不同的 IP,因此验证失败。
可以使用 Camel FTP 通过创建 FTPClient 的特定实例并设置删除验证来修复此问题。
FTPClient ftp = new FTPClient();
ftp.setRemoteVerificationEnabled(false);
registry.put("FTPClient", ftp);
然后在 FTP 的 URI 中引用该对象
ftp://user@host:21/path?password=xxxx&passiveMode=true&tempPrefix=part.&ftpClient=#FTPClient
显然,通过禁用此远程验证测试,您会更容易受到 FTP 数据被重定向或拦截的影响,并且您的数据会被发送到您不希望的地方,但我猜您是否担心您不会使用首先仍然使用未加密的 FTP。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)