|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
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 Integration还支持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. 请参阅下面的示例,了解如何覆盖createSftpChannelSubsystem()自定义中的方法SftpClient例如,添加一些自定义RequestHandler对于 SFTP 子系统请求和回复:
@Override
protected ChannelSubsystem createSftpChannelSubsystem(ClientSession clientSession) {
ChannelSubsystem sftpChannelSubsystem = super.createSftpChannelSubsystem(clientSession);
sftpChannelSubsystem.addRequestHandler((channel, request, wantReply, buffer) -> ...);
return sftpChannelSubsystem;
}
配置属性
以下列表描述了DefaultSftpSessionFactory.
isSharedSession(构造函数参数)::当true,单个SftpClient用于所有请求的SftpSession实例。 它默认为false.
sftpVersionSelector::一SftpVersionSelector用于 SFTP 协议选择的实例。默认为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是错误的。
password::用于对远程主机进行身份验证的密码。如果未提供密码,则privateKey属性是必需的。
privateKey::一org.springframework.core.io.Resource表示用于对远程主机进行身份验证的私钥的位置。如果privateKey未提供,则password属性是必需的。
privateKeyPassphrase::私钥的密码。如果您将userInfo,privateKeyPassphrase不允许。密码是从该对象获取的。 自选。
timeout::timeout 属性用作套接字超时参数,以及默认连接超时。默认为30 seconds. 设置为0表示没有超时; 自null- 无限等待。
allowUnknownKeys::设置为true以允许连接到具有未知(或已更改)密钥的主机。
它的默认值是 'false'。
如果false,预填充的knownHostsfile 是必填项。
userInteraction::定制org.apache.sshd.client.auth.keyboard.UserInteraction在身份验证期间使用。
从 6.4 版开始,DefaultSftpSessionFactory公开一个Consumer<SshClient>configurer 属性以进一步自定义内部SshClient.
例如,以下是如何更改客户端的默认 NIO 工作线程数和数据包大小:
sftpSessionFactory.setSshClientConfigurer((sshClient) -> {
sshClient.setNioWorkers(27);
PropertyResolverUtils.updateProperty(sshClient, CoreModuleProperties.MAX_PACKET_SIZE.getName(), 48 * 1024);
});