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

一、情景

项目由于需要支持大文件传输和下载,用到了开源的Apache FtpServerhttp://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

  这个类是对外提供服务的。增加或者修改具体的方法。

 


注:因为不能涉及具体业务,所以写的不够详细,见谅。基本思路已经写出来了,按照这个思路,再仔细看看代码,应该没问题的。


原文链接: http://blog.csdn.net/arui319/article/details/5785604

你可能感兴趣的:(如何在Apache FtpServer基础上增加或者修改FTP命令)