Apache FtpServer扩展【动手实现自己的业务】

Apache FtpServer是当下最热门的走ftp协议的用于用户上传下载的服务器。

官网http://mina.apache.org/ftpserver-project/

一般来说,用的话,去官网下载完整的项目文件ftpserver-1.0.6.zip【windows版】和ftpserver-1.0.6.tar.gz【linux版】到本地,解压之后配置一下\ftpserver-1.0.6\apache-ftpserver-1.0.6\res\conf\下的users.properties或者ftpd-full.xml【主要看你走什么样的用户验证方式。users.properties:把用户信息配置在这个文件中。ftpd-full.xml:把用户信息配置在数据库中】

这样去bin目录下启动程序就好了。

但是Apache FtpServer从官方文档来看,都没有提及如何改变其中一些功能,只是解释一些它提供的标准功能。

这样对于企业级的应用来说,有些功能并不能满足现有的业务。

比如,我想限制每个ftp用户上传文件到他的文件目录下时,我想限制每个用户最多上传文件的总大小不超过50M。因为我不想被恶意用户弄爆我的服务器。我查阅了大量资料,发现标准的官方版里面是没有这样的功能的,在ftpd-full.xml和users.properties这里面也没有任何可以修改的参数来控制这样的业务。最后我决定自己通过编程来实现这样一个专门服务于我的这样的FtpServer。

我有这种想法的原因是,Apache FtpServer是纯java写的服务,而且提供了丰富的java接口。

查阅了大量资料后,还是找不到怎么用代码从jar里面启动整个server。

最后用反编译工具反编译整个Apache FtpServer项目后发现了,找到了启动的入口。

 1 public MyFtpServer() throws FtpException{
 2
 3         //读取my-ftpd-full.xml,连接数据库和监控配置,然后来启动server
 4         FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(xmlPath);
 5         FtpServer server = null;
 6         if (ctx.containsBean("server")) {
 7             server = (FtpServer)ctx.getBean("server");
 8          } else {
 9             String[] beanNames = ctx.getBeanNamesForType(FtpServer.class);
10             if (beanNames.length == 1) {
11                 server = (FtpServer)ctx.getBean(beanNames[0]);
12             } else if (beanNames.length > 1) {
13                 logger.info("Using the first server defined in the configuration, named " + beanNames[0]);
14                 server = (FtpServer)ctx.getBean(beanNames[0]);
15             } else {
16                 logger.info("XML configuration does not contain a server configuration");
17             }
18         }
19
20         //ftp服务器启动
21         server.start();
22
23         //在jvm关闭的时候,清理函数
24         addShutdownHook(server);
25     }
26
27     /**
28      * 清理的垃圾的钩子函数
29      * @param engine
30      */
31     private void addShutdownHook(final FtpServer engine)
32       {
33         Runnable shutdownHook = new Runnable() {
34           public void run() {
35            logger.info("Stopping server...");
36             engine.stop();
37           }
38         };
39         Runtime runtime = Runtime.getRuntime();
40         runtime.addShutdownHook(new Thread(shutdownHook));
41       }

配合上我的研究发现,提供的接口中可以在ftpd-full.xml中配置

    <ftplets>
        <ftplet name="MyFtplet">
            <beans:bean class="com.shiyi.km.ftpserver.control.MyFtplet">
<!--                 <beans:property name="foo" value="123" /> -->
            </beans:bean>
        </ftplet>
    </ftplets>

类似于监听器的东西,可以监听每个用户在上传或者下载的动作,在这些监听事件里面,我每次都去计算那个用户目录下面的文件size总大小,如果超过限制,就stop,并返回警告代码和消息给用户。

差不多整体的思路是这样的。

有了这些基础,还可以实现各种各样的不同需求,来管理用户目录或者一些其他的业务。

时间: 2024-10-29 01:09:41

Apache FtpServer扩展【动手实现自己的业务】的相关文章

(转载)Windows 上搭建Apache FtpServer

因工作需要,最近经常接触到FTP,今天我来介绍一个开源的FTP服务器,那就是Apache FTPServer,Apache FTPServer是一个100%纯Java的FTP服务器. 它的设计是基于现有的开放式协议的完整和便携式FTP服务器引擎解决方案.FTPServer可独立运行作为Windows服务或Unix/ Linux后台程序或是被嵌入在Java应用程序中.接下来介绍一下如何在Windows环境下安装Apache FTPServer: 第一步:下载Apache FTPServer 可以到

Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)

一.简介 在项目中,几乎任何一个项目都包括静态资源和动态请求两大部分.特别对于门户网站这样的项目,静态内容资源会更多,我们使用一般的 Tomcat 部署时,Tomcat 对静态资源的处理能力比较慢,至少比 Apache 要慢很多. 为了提高项目的访问速度,降低服务器负载提高性能,我们使用Apache来处理静态资源,把动态资源和请求交给 Tomcat 处理. 当然,在单纯处理并发和静态资源指标方面,Nginx要比Apache好,至于Nginx和Apache的具体区别,以及什么项目使用Nginx.什

在Window2008上搭建 Apache FTPServer

在Window2008上搭建 Apache FTPServer windows2003马上要停止维护了,时间好像是在2015年5月7日.阿里云希望用户能够升级服务器,刚好公司的新项目马上要上线了,所以就尝试了一下将云服务器升级到Windows2008. 是一个小项目,所以生产环境也比较简单: Java7 Tomcat Mysql FTP服务器(选择的Apache FTPServer) 别的安装没什么说的,和在Windows2003上是一样的.具体说说安装FTP的问题. 下载 下载个人建议不管下载

Apache FtpServer详解

FTP 是FileTransfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 (Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常 遇到两个概念:"下载"(Download)和"上传"(Upload)."下载"文件就是从远程主机拷贝文件至自

独立运行Apache FtpServer 1.0.0启动时报错

本机已安装JRE 1.4.2_19-b04,通过独立运行的方式启动Apache FtpServer 1.0.0时报错. D:\apache-ftpserver-1.0.0>bin\ftpd.bat res\conf\ftpd-typical.xml Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ftpserver/main/CommandLine (Unsupported

Windows 7安装Apache FtpServer 1.0.0

参考:Windows XP安装Apache FtpServer 1.0.0bin\service install ftpd res\conf\ftpd-typical.xml 服务安装完成后,注册表信息如下:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\ftpd\Parameters将Value [Jvm]设置为D:\JRE 6.0.450.6 32-bit Portable\bin\

Apache FtpServer常见问题及解决方案

ftpdw.exe所在目录下缺少msvcr71.dll jakarta_service_20190520.log [2019-05-20 00:08:41] [info] Running Service...[2019-05-20 00:08:41] [info] Starting service...[2019-05-20 00:08:41] [174  javajni.c] [error] The specified module could not be found. [2019-05-2

apache的扩展配置功能说明

apache包含<virtualhost> <directory>等主配置模块. <VirtualHost *:80> ServerName xxx; DocumentRoot /var/www/html; access-log  /xxxx/xxx/xxx-log; error-log    /xxx/xxx/xxx-log; #以上配置参数后面的内容可以任意,只要存在 https的访问方式:安装 mod_ssl   防火墙开通443端口. 7版本开通防火墙:fire

Apache 编译扩展的方法

下载源码包 进入源码包的modules目录 选择你要编译的.c文件 eg: /home/work/local/apache/bin/apxs -c -i -a mod_proxy_http.c 选项说明: -c 执行编译操作 -i 安装操作,安装一个或多个动态共享对象到服务器的modules目录 -a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之 -A 与-a类似,但是它增加的LoadModule行前有井号前缀(#) -e 需要执行编辑操作,可与