如何在Apache FtpServer基礎上增加或者修改FTP命令

來源:互聯網
上載者:User

一、情景

項目由於需要支援大檔案傳輸和下載,用到了開源的Apache FtpServer(http://mina.apache.org/ftpserver/)。但是,為了配合用戶端使用,這些FTP命令並不能滿足需求,即需要增加一些命令,也需要刪除或者修改一些對於整個系統可能帶來安全問題的命令。

 

二、修改Apache
FtpServer的大致思路

1. 新增加命令,則增加具體的實作類別,繼承AbstractCommand,實現execute()方法。

2. 自訂一個類MyCommandFactoryFactory,對DEFAULT_COMMAND_MAP進行初始化控制,增加自己定義的命令。

具體代碼可以參考org.apache.ftpserver.command.CommandFactoryFactory,基本類似。

3. 在server啟動之前,重新設定CommandFactory。

serverFactory.setCommandFactory((new
MyCommandFactoryFactory()).createCommandFactory());

(另外:也可以直接修改CommandFactoryFactory的代碼,這樣比較簡單。但是一般情況下,如果對於開源包有更改,還是建議繼承或者重寫相關的類,這樣以後升級使用的包更容易些。)

 

三、如何對定製後的FtpServer測試

對於定製後的FtpServer,因為命令已經改變,使用傳統的一些FTP工具就無法對Server進行測試了。這就需要自己寫一個同樣是定製過的簡單的Ftp用戶端來進行測試。Apache提供的commonnet包(http://commons.apache.org/net/)對於Ftp協議進行了支援,並且是開源的,所以可以直接修改commonnet的代碼,提供一個定製版本的commonnet,以對定製的Ftp命令進行支援。然後再使用定製版本的commonnet寫一個簡單的Ftp用戶端。

 

四、修改commonnet代碼的大致思路

1. org.apache.commons.net.ftp.FTPCommand類

  代碼不多,很容易懂。需要修改或者增加命令。

2. org.apache.commons.net.ftp.FTP類

  這個類封裝了Ftp用戶端的主要功能。增加或者修改具體的方法。

3. org.apache.commons.net.ftp.FtpClient類

  這個類是對外提供服務的。增加或者修改具體的方法。

 


註:因為不能涉及具體業務,所以寫的不夠詳細,見諒。基本思路已經寫出來了,按照這個思路,再仔細看看代碼,應該沒問題的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.