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 Proxy 的支援。

SshClient 支援透過與伺服器的連線進行多個通道(操作)。依預設,Spring Integration 會話工廠會為每個通道使用個別的實體連線。從 Spring Integration 3.0 開始,您可以配置會話工廠(使用布林建構子引數 - 預設 false)以使用與伺服器的單一連線,並在該單一連線上建立多個 SftpClient 執行個體。

使用此功能時,您必須將會話工廠包裝在快取會話工廠中,如稍後描述,以便在操作完成時不會實際關閉連線。

如果快取已重設,則僅當最後一個通道關閉時,會話才會斷線。

當新操作取得會話時,如果連線要斷線,則會重新整理連線。

現在您只需要將此 SFTP 會話工廠注入到您的配接器中即可。

為 SFTP 會話工廠提供值的更實用方法是使用 Spring 的 屬性預留位置支援

從 6.1.3 版開始,DefaultSftpSessionFactory 引入了 createSftpClient(…​) 以支援自訂 SftpClient。請參閱下面的範例,了解如何在您的自訂 SftpClient 中覆寫 createSftpChannelSubsystem() 方法,以新增(例如)一些自訂 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::用於 SFTP 協定選擇的 SftpVersionSelector 執行個體。預設值為 SftpVersionSelector.CURRENT

host::要連線的主機 URL。必要。

hostConfig::org.apache.sshd.client.config.hosts.HostConfigEntry 執行個體,作為使用者/主機/連接埠選項的替代方案。可以使用 Proxy 跳躍屬性進行配置。

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 屬性用作 Socket timeout 參數,以及預設連線 timeout。預設值為 30 秒。設定為 0 表示沒有 timeout;設定為 null 表示無限等待。

allowUnknownKeys::設定為 true 以允許連線到具有不明(或已變更)金鑰的主機。預設值為 'false'。如果為 false,則需要預先填入的 knownHosts 檔案。

userInteraction::自訂 org.apache.sshd.client.auth.keyboard.UserInteraction,在驗證期間使用。