Как заблокировать операции удаления SFTP с Apache MINA SSHD - PullRequest
2 голосов
/ 18 января 2020

Я пытаюсь создать собственный сервер sftp, используя Apache Mina SSHD. Мой код на данный момент:

 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");
    }

Когда я хочу удалить файл, он выполняет мои удаления и удаленные слушатели, НО операция удаления продолжается и файл удаляется.

Есть ли способ, как это предотвратить?

Спасибо за помощь!

1 Ответ

0 голосов
/ 21 января 2020

Если вы хотите заблокировать действия удаления, вам необходимо прервать выполнение метода removing с исключением. Это скажет Мине остановиться и не удалять файл. Я бы рекомендовал использовать java.lang.UnsupportedOperationException для этого:

@Override
public void removing(ServerSession session, Path path) throws UnsupportedOperationException{
    throw new UnsupportedActionException("Removing files is not permitted.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...