SFTP 会话工厂
从 3.0 版本开始,会话不再默认缓存。请参阅 SFTP 会话缓存。 |
在配置 SFTP 适配器之前,您必须配置一个 SFTP 会话工厂。您可以使用常规 Bean 定义配置 SFTP 会话工厂,如下例所示
<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>
每次适配器从其 SessionFactory
请求会话对象时,都会创建一个新的 SFTP 会话。在底层,SFTP 会话工厂依赖于 Apache MINA SSHD 库来提供 SFTP 功能。
但是,Spring 集成还支持 SFTP 会话缓存。有关更多信息,请参阅 SFTP 会话缓存。
DefaultSftpSessionFactory 可以使用外部配置或扩展的 SshClient 。例如,org.eclipse.jgit.internal.transport.sshd.JGitSshClient 扩展来自 org.eclipse.jgit:org.eclipse.jgit.ssh.apache 库,可用于提供对 HTTP/SOCKS 代理的支持。
|
使用此功能时,您必须将会话工厂包装在缓存会话工厂中,如 后面所述,以便在操作完成后不会物理关闭连接。 如果重置缓存,则仅在关闭最后一个通道时才断开会话。 如果在新的操作获取会话时断开连接,则刷新连接。 |
现在,您需要做的就是将此 SFTP 会话工厂注入到您的适配器中。
为 SFTP 会话工厂提供值的更实际的方法是使用 Spring 的 属性占位符支持。 |
从 6.1.3 版本开始,DefaultSftpSessionFactory
引入了 createSftpClient(…)
来支持自定义 SftpClient
。请参阅以下示例,了解如何在自定义 SftpClient
中覆盖 createSftpChannelSubsystem()
方法,例如为 SFTP 子系统请求和答复添加一些自定义 RequestHandler
@Override
protected ChannelSubsystem createSftpChannelSubsystem(ClientSession clientSession) {
ChannelSubsystem sftpChannelSubsystem = super.createSftpChannelSubsystem(clientSession);
sftpChannelSubsystem.addRequestHandler((channel, request, wantReply, buffer) -> ...);
return sftpChannelSubsystem;
}
配置属性
以下列表描述了 DefaultSftpSessionFactory
公开的属性。
isSharedSession
(构造函数参数):当为 true
时,所有请求的 SftpSession
实例都使用单个 SftpClient
。它默认为 false
。
sftpVersionSelector
:用于 SFTP 协议选择的 SftpVersionSelector
实例。默认值为 SftpVersionSelector.CURRENT
。
host
:要连接到的主机的 URL。必需。
hostConfig
:作为用户/主机/端口选项的替代项,一个 org.apache.sshd.client.config.hosts.HostConfigEntry
实例。可配置代理跳转属性。
port
:建立 SFTP 连接的端口。如果未指定,此值默认为 22
。如果指定,此属性必须为正数。
user
:要使用的远程用户。必需。
knownHostsResource
:用于主机密钥存储库的 org.springframework.core.io.Resource
。资源的内容必须与 OpenSSH known_hosts
文件的格式相同,并且如果 allowUnknownKeys
为 false,则必须预先填充。
password
:用于对远程主机进行身份验证的密码。如果未提供密码,则需要 privateKey
属性。
privateKey
:表示用于对远程主机进行身份验证的私钥位置的 org.springframework.core.io.Resource
。如果未提供 privateKey
,则需要 password
属性。
privateKeyPassphrase
:私钥的密码。如果设置 userInfo
,则不允许使用 privateKeyPassphrase
。密码将从该对象获取。可选。
timeout
:超时属性用作套接字超时参数以及默认连接超时。默认为 30 秒
。设置为 0
表示无超时;设置为 null
表示无限等待。
allowUnknownKeys
:设置为 true
以允许连接到具有未知(或已更改)密钥的主机。其默认值为“false”。如果为 false
,则需要预先填充 knownHosts
文件。
userInteraction
:在身份验证期间要使用的自定义 org.apache.sshd.client.auth.keyboard.UserInteraction
。