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:org.eclipse.jgit.ssh.apache 庫中的 org.eclipse.jgit.internal.transport.sshd.JGitSshClient 擴充套件來提供 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
例項,作為 user/host/port 選項的替代。可以使用代理跳板屬性進行配置。
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
::timeout 屬性用作套接字超時引數以及預設連線超時。預設為 30 秒
。設定為 0
表示沒有超時;設定為 null
表示無限等待。
allowUnknownKeys
::設定為 true
以允許連線到金鑰未知(或更改)的主機。預設值為 'false'。如果為 false
,則需要預先填充的 knownHosts
檔案。
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);
});