2015-01-19 1 views
1

Я использую Apache Mina FTPServer. Как упоминалось в documentation, я расширяю класс DefaultFtplet. Я помещаю отпечатки (SOP) в некоторые события, упомянутые в документации, например onConnect и т. Д., И все работает нормально.Apache FTPServer - ограничивающие команды типа «DELE»

Теперь я хочу ограничить DELE команду, чтобы в документации я переопределен метод onDeleteStart, но клиент получает повешен и отсоединение без какой-либо из моих сообщений.

Поскольку я не смог найти более конкретную документацию по такому сценарию, после мой код:

@Override 
public FtpletResult onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException { 
    System.out.println("\n\n\nonDeleteStart\n\n\n"); 

    FtpReply reply = new FtpReply() { 

     @Override 
     public String getMessage() { 
      return "Deletion not supported"; 
     } 

     @Override 
     public int getCode() { 
      return FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN; 
     } 
    }; 
    session.write(reply); // Not sure if this is the right way! 

    return FtpletResult.SKIP; 
} 

Пожалуйста, дайте мне знать, что я здесь отсутствует, или это правильный способ сделать даже ?

Client (ftp командной строки, и WinSCP) не получает сообщение от getMessage(), и висит, а затем отсоединять

ответ

0

Вы можете использовать DefaultFtpReply вместо создания new FtpReply();

FtpReply reply = new DefaultFtpReply(FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, 
"Deletion not supported"); 
session.write(reply);