处理Camel sftp端点身份验证失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理Camel sftp端点身份验证失败相关的知识,希望对你有一定的参考价值。

是否有任何理智的方法来处理sftp端点的身份验证失败?

我有一个带有sftp端点的camel路由,特别是它将文件移动到sftp。当sftp位置不可用时,我想:

  • 如果其身份验证失败,请记录,并且不要重试。将原始文件移动到失败文件夹。
  • 如果主机未知,请记录并不要重试。将原始文件移动到失败文件夹。
  • 否则:在失败前重试几次。

不幸的是,SftpOperations一直在重试。在身份验证失败的情况下(如果部署应用程序的人在属性文件中输入错误,则很容易发生这种情况)这意味着重复尝试使用错误的凭据。如果只是密码错误,可能会导致用户被阻止。

答案

在我的具体情况下,我决定在sftp端点发生错误时根本不会重试。这是通过在路由配置中添加以下内容来实现的:

   &maximumReconnectAttempts=0&throwExceptionOnConnectFailed=true&consumer.bridgeErrorHandler=true

第一次尝试后路线现在失败了。在更一般的情况下,如果您想处理不同的异常(请参阅this问题),您可以像这样使用onException:

        from(route.getDownloadFromUri())
            .routeId(route.getRouteId())
            .routePolicy(getRoutePolicy())
            .onException(JSchException.class)
                .maximumRedeliveries(2)
                .handled(true)
                .log(LoggingLevel.ERROR, LOG, "!!!! Caught JSchException")
                .to(SEND_EMAIL_ROUTE)
                .end()
            .onException(Throwable.class)
                .maximumRedeliveries(5)
                .handled(true)
                .log(LoggingLevel.ERROR, LOG, "Error moving file ${file:name}: ${exception}")
                .to(SEND_EMAIL_ROUTE)
                .end()
            .onException(IgnoreException.class) // Do nothing, just end processing so routePolicy onEchangeDone is executed
                .handled(true)
                .end()

以上是关于处理Camel sftp端点身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

当我们尝试在 Python 中使用 pysftp 从 SFTP 串行下载 50 多个文件时,下载失败并显示“身份验证失败”?

通过 Java 的 SFTP 连接要求奇怪的身份验证

Keycloak CIBA 身份验证失败并显示“发送身份验证请求失败”

教程4 - 验证和权限

使用 ProducerTemplate 使用 Camel 进行代理身份验证

使用 pysftp 连接到 SFTP 服务器时出现“加载主机密钥失败”警告