此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

从版本 3.0 开始,默认情况下不再缓存会话。 请参阅 SFTP 会话缓存

在配置 SFTP 适配器之前,必须配置 SFTP 会话工厂。 您可以使用常规 Bean 定义配置 SFTP 会话工厂,如以下示例所示:Spring中文文档

<beans:bean id="sftpSessionFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <beans:property name="host" value="localhost"/>
    <beans:property name="privateKey" value="classpath:META-INF/keys/sftpTest"/>
    <beans:property name="privateKeyPassphrase" value="springIntegration"/>
    <beans:property name="port" value="22"/>
    <beans:property name="user" value="kermit"/>
</beans:bean>

每当适配器从其 请求会话对象时,都会创建一个新的 SFTP 会话。 在幕后,SFTP 会话工厂依靠 Apache MINA SSHD 库来提供 SFTP 功能。SessionFactorySpring中文文档

但是,Spring Integration 还支持缓存 SFTP 会话。 有关详细信息,请参阅 SFTP 会话缓存Spring中文文档

可以使用外部配置或扩展的 . 例如,库中的扩展可用于提供对 HTTP/SOCKS 代理的支持。DefaultSftpSessionFactorySshClientorg.eclipse.jgit.internal.transport.sshd.JGitSshClientorg.eclipse.jgit:org.eclipse.jgit.ssh.apache

通过与服务器的连接支持多个通道(操作)。 默认情况下,Spring Integration 会话工厂对每个通道使用单独的物理连接。 从 Spring Integration 3.0 开始,您可以将会话工厂(使用布尔构造函数 arg - default )配置为使用与服务器的单个连接,并在该单个连接上创建多个实例。SshClientfalseSftpClientSpring中文文档

使用此功能时,必须将会话工厂包装在缓存会话工厂中,如下文所述,以便在操作完成时不会物理关闭连接。Spring中文文档

如果重置缓存,则仅当最后一个通道关闭时,会话才会断开连接。Spring中文文档

如果在新操作获取会话时断开连接,则会刷新连接。Spring中文文档

现在,您需要做的就是将此 SFTP 会话工厂注入到适配器中。Spring中文文档

为 SFTP 会话工厂提供值的一种更实用的方法是使用 Spring 的属性占位符支持

从版本 6.1.3 开始,引入了 a 来支持自定义 . 请参阅下面的示例,了解如何覆盖自定义中的方法以添加,例如,SFTP 子系统请求和回复的一些自定义:DefaultSftpSessionFactorycreateSftpClient(…​)SftpClientcreateSftpChannelSubsystem()SftpClientRequestHandlerSpring中文文档

@Override
protected ChannelSubsystem createSftpChannelSubsystem(ClientSession clientSession) {
    ChannelSubsystem sftpChannelSubsystem = super.createSftpChannelSubsystem(clientSession);
    sftpChannelSubsystem.addRequestHandler((channel, request, wantReply, buffer) -> ...);
    return sftpChannelSubsystem;
}
从版本 3.0 开始,默认情况下不再缓存会话。 请参阅 SFTP 会话缓存
可以使用外部配置或扩展的 . 例如,库中的扩展可用于提供对 HTTP/SOCKS 代理的支持。DefaultSftpSessionFactorySshClientorg.eclipse.jgit.internal.transport.sshd.JGitSshClientorg.eclipse.jgit:org.eclipse.jgit.ssh.apache

通过与服务器的连接支持多个通道(操作)。 默认情况下,Spring Integration 会话工厂对每个通道使用单独的物理连接。 从 Spring Integration 3.0 开始,您可以将会话工厂(使用布尔构造函数 arg - default )配置为使用与服务器的单个连接,并在该单个连接上创建多个实例。SshClientfalseSftpClientSpring中文文档

使用此功能时,必须将会话工厂包装在缓存会话工厂中,如下文所述,以便在操作完成时不会物理关闭连接。Spring中文文档

如果重置缓存,则仅当最后一个通道关闭时,会话才会断开连接。Spring中文文档

如果在新操作获取会话时断开连接,则会刷新连接。Spring中文文档

为 SFTP 会话工厂提供值的一种更实用的方法是使用 Spring 的属性占位符支持

配置属性

下面的列表描述了 DefaultSftpSessionFactory 公开的所有属性。Spring中文文档

isSharedSession(constructor argument)::When ,一个实例用于所有请求的实例。 它默认为 。trueSftpClientSftpSessionfalseSpring中文文档

sftpVersionSelector::SFTP协议选择实例。 默认值为 。SftpVersionSelectorSftpVersionSelector.CURRENTSpring中文文档

host::要连接到的主机的 URL。 必填。Spring中文文档

hostConfig::作为用户/主机/端口选项的替代实例。 可以使用代理跳转属性进行配置。org.apache.sshd.client.config.hosts.HostConfigEntrySpring中文文档

port::建立SFTP连接的端口。 如果未指定,则此值默认为 。 如果指定,则此属性必须为正数。22Spring中文文档

user::要使用的远程用户。 必填。Spring中文文档

knownHostsResource::用于主机密钥存储库的 ::An 用于主机密钥存储库。 资源的内容必须与 OpenSSH 文件的格式相同,并且是必需的,如果为 false,则必须预先填充。org.springframework.core.io.Resourceknown_hostsallowUnknownKeysSpring中文文档

password::用于对远程主机进行身份验证的密码。 如果未提供密码,则该属性是必需的。privateKeySpring中文文档

privateKey::An 表示用于对远程主机进行身份验证的私钥的位置。 如果未提供,则该属性是必需的。org.springframework.core.io.ResourceprivateKeypasswordSpring中文文档

privateKeyPassphrase::私钥的密码。 如果设置 ,则不允许。 密码是从该对象获取的。 自选。userInfoprivateKeyPassphraseSpring中文文档

timeout::timeout 属性用作套接字超时参数,以及默认连接超时。 默认值为 。 设置为表示无超时;到 - 无限等待。30 seconds0nullSpring中文文档

allowUnknownKeys::设置为允许连接到具有未知(或更改)密钥的主机。 其默认值为“false”。 如果 ,则需要预填充的文件。truefalseknownHostsSpring中文文档

userInteraction::在身份验证期间使用的自定义。org.apache.sshd.client.auth.keyboard.UserInteractionSpring中文文档