Apache Mina SFTP サーバーイベント

バージョン 5.2 で追加された ApacheMinaSftpEventListener は、特定の Apache Mina SFTP サーバーイベントをリッスンし、ApplicationListener Bean、@EventListener Bean メソッド、またはイベント受信チャネルアダプターで受信できる ApplicationEvent として公開します。

現在、サポートされているイベントは次のとおりです。

  • SessionOpenedEvent - クライアントセッションが開かれました

  • DirectoryCreatedEvent - ディレクトリが作成されました

  • FileWrittenEvent - ファイルが書き込まれた

  • PathMovedEvent - ファイルまたはディレクトリの名前が変更されました

  • PathRemovedEvent - ファイルまたはディレクトリが削除されました

  • SessionClosedEvent - クライアントが切断されました

これらはそれぞれ ApacheMinaSftpEvent のサブクラスです。すべてのイベント型を受信するように単一のリスナーを設定できます。各イベントの source プロパティは ServerSession であり、そこからクライアントアドレスなどの情報を取得できます。抽象イベントには、便利な getSession() メソッドが用意されています。

リスナー(Spring Bean でなければなりません)でサーバーを構成するには、単に SftpSubsystemFactory に追加します。

server = SshServer.setUpDefaultServer();
...
SftpSubsystemFactory sftpFactory = new SftpSubsystemFactory();
sftpFactory.addSftpEventListener(apacheMinaSftpEventListenerBean);
...

Spring Integration イベントアダプターを使用してこれらのイベントを消費するには:

@Bean
public ApplicationEventListeningMessageProducer eventsAdapter() {
    ApplicationEventListeningMessageProducer producer =
        new ApplicationEventListeningMessageProducer();
    producer.setEventTypes(ApacheMinaSftpEvent.class);
    producer.setOutputChannel(eventChannel());
    return producer;
}