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 例項,作為使用者/主機/埠選項的替代。可以配置代理跳轉屬性。
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。
從 6.4 版本開始,DefaultSftpSessionFactory 公開了一個 Consumer<SshClient> 配置器屬性,以進一步自定義內部 SshClient。例如,這是如何更改客戶端的預設 NIO 工作執行緒數和資料包大小的方法
sftpSessionFactory.setSshClientConfigurer((sshClient) -> {
sshClient.setNioWorkers(27);
PropertyResolverUtils.updateProperty(sshClient, CoreModuleProperties.MAX_PACKET_SIZE.getName(), 48 * 1024);
});