|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
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 会话缓存。
The DefaultSftpSessionFactory can use an externally configured or extended SshClient.
For example, the org.eclipse.jgit.internal.transport.sshd.JGitSshClient extension from the org.eclipse.jgit:org.eclipse.jgit.ssh.apache library may be used to provide support for HTTP/SOCKS proxies. |
|
The 使用此功能时,必须将会话工厂包装在缓存会话工厂中,如稍后所述,以便在操作完成后连接不会被物理关闭。 如果缓存被重置,则仅在最后一个通道关闭时断开会话。 当新操作获取会话时,如果连接即将断开,则刷新该连接。 |
现在您需要做的只是将此 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.CURRENT。
host::要连接的主机的 URL。
必需。
hostConfig::作为用户/主机/端口选项的替代方案,指定一个实例。
可以使用代理跳转属性进行配置。
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 seconds。
设置为 0 表示无超时;设置为 null 表示无限等待。
allowUnknownKeys::设置为 true 以允许连接到具有未知(或已更改)密钥的主机。
其默认值为 'false'。
如果为 false,则需要一个预填充的 knownHosts 文件。
userInteraction::身份验证期间使用的自定义 org.apache.sshd.client.auth.keyboard.UserInteraction。
从版本 6.4 开始,DefaultSftpSessionFactory 暴露了一个 Consumer<SshClient> 配置器属性,以进一步自定义内部的 SshClient。
例如,以下是如何更改客户端默认的 NIO 工作线程数和数据包大小:
sftpSessionFactory.setSshClientConfigurer((sshClient) -> {
sshClient.setNioWorkers(27);
PropertyResolverUtils.updateProperty(sshClient, CoreModuleProperties.MAX_PACKET_SIZE.getName(), 48 * 1024);
});