【问题标题】:How to block SFTP remove operations with Apache MINA SSHD如何使用 Apache MINA SSHD 阻止 SFTP 删除操作
【发布时间】:2020-01-18 17:23:26
【问题描述】:

我正在尝试使用 Apache Mina SSHD 创建自定义 sftp 服务器。到目前为止我的代码:

 SshServer sshd = SshServer.setUpDefaultServer();
        sshd.setPort(PORT_NUMBER);
        sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(Paths.get("keys/private_key.ppk")));

        SftpSubsystemFactory factory = new SftpSubsystemFactory.Builder()
                .build();


        factory.addSftpEventListener(new BasicSftpEventListener());

        sshd.setSubsystemFactories(Collections.singletonList(factory));
        sshd.setShellFactory(new ProcessShellFactory("/bin/sh", "-i", "-l"));
        sshd.start();

如你所见,我实现了自己的 SftpEventListener:

public class BasicSftpEventListener implements SftpEventListener {

    @Override
    public void removing(ServerSession session, Path path) throws IOException {
        System.out.println("Removin");
    }

    @Override
    public void removed(ServerSession session, Path path, Throwable thrown) throws IOException {
        System.out.println("removed");
    }

当我想删除文件时,它会执行我的删除和删除侦听器,但是删除操作会继续并且文件被删除。

有没有办法阻止这种情况发生?

感谢您的帮助!

【问题讨论】:

    标签: java apache apache-mina apache-sshd


    【解决方案1】:

    如果您想阻止删除操作,则需要中断removing 方法的流程并出现异常。这将告诉 Mina 停止而不是删除文件。我建议为此使用java.lang.UnsupportedOperationException

    @Override
    public void removing(ServerSession session, Path path) throws UnsupportedOperationException{
        throw new UnsupportedActionException("Removing files is not permitted.");
    }
    

    【讨论】:

    • 嗯,这是一种方法,但我不认为抛出异常来中断流是个好主意。似乎只有“好”的方法是扩展一些类并覆盖行为。
    猜你喜欢
    • 2015-06-22
    • 2015-09-02
    • 2017-10-06
    • 2020-11-14
    • 2019-05-27
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多