`
mimang2007110
  • 浏览: 237180 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Apache Ftp Server与spring框架融合

 
阅读更多

最近在写一个项目,需要用到FTP服务,就从网上搜了一下,发现Apache Ftp Server相对来说使用方便,性能稳定,效率高,且该服务器是开源免费的,而且该服务器与spring容器可以无缝的融合到一起,下面是我写的一个例子,供有需要的参考。

第一步:下载jar包,拷贝到项目的lib目录下,jar包请参照附件

第二步:添加配置文件ftpserver.xml,具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd">
	
	<!-- FTP服务器启动参数配置 -->
	<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
		id="ftpServer" 
		max-logins="500" 
		anon-enabled="false" 
		max-anon-logins="0"
		max-login-failures="3" 
		login-failure-delay="500">
		<listeners>
			<nio-listener name="default" port="2121" idle-timeout="60">
				<ssl>  
	            	<keystore file="ftpserver.jks" password="password" />
	            </ssl>
			</nio-listener>
		</listeners>
		<!-- <file-user-manager file="users.properties" /> -->
		<db-user-manager>
			<data-source>
				<beans:bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
					<beans:property name="driverClass" value="${jdbc.driverClassName}" />
					<beans:property name="jdbcUrl" value="${jdbc.url}" />
					<beans:property name="user" value="${jdbc.username}" />
					<beans:property name="password" value="${jdbc.password}" />
				</beans:bean>
			</data-source>
			<insert-user>
				INSERT INTO FtpUser 
					(userid, userpassword, homedirectory, enableflag, writepermission, idletime, uploadrate, downloadrate) 
				VALUES 
					('{userid}', '{userpassword}', '{homedirectory}', true, true, {idletime}, {uploadrate}, {downloadrate})
			</insert-user>
			<update-user>
				UPDATE FtpUser SET
					userpassword='{userpassword}',
					homedirectory='{homedirectory}',
					enableflag={enableflag},
					writepermission={writepermission},
					idletime={idletime},
					uploadrate={uploadrate},
					downloadrate={downloadrate}
				WHERE 
					userid='{userid}'
			</update-user>
			<delete-user>DELETE FROM FtpUser WHERE userid = '{userid}'</delete-user>
			<select-user>
				SELECT 
					userid, userpassword, homedirectory,
					enableflag, writepermission, idletime, uploadrate, downloadrate,
					maxloginnumber, maxloginperip 
				FROM 
					FtpUser 
				WHERE 
					userid = '{userid}'
			</select-user>
			<select-all-users>SELECT userid FROM FtpUser ORDER BY userid</select-all-users>
			<is-admin>
				SELECT userid FROM FtpUser WHERE userid='{userid}' AND userid='admin'
			</is-admin>
			<authenticate>SELECT userpassword from FtpUser WHERE userid='{userid}'</authenticate>
		</db-user-manager>
	</server>
</beans>

        注:FTP用户的管理方式我使用的是数据库的方式

        data-source里面的beans:property值都是从jdbc.properties中获取的,资源值是通过spring获取的

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
			</list>
		</property>
	</bean>

 jdbc.properties内容请参照附件

把该文件导入到spring配置文件中,代码如下:

<!-- 导入FTP SERVER配置 -->
<import resource="classpath:/ftpserver.xml"/>

 

 第三步:拷贝ftpserver.jks文件到src目录,该文件在apache-ftpserver-1.0.6\res目录下

 

 第四步:建立FTP服务监听类FtpServerListener,代码如下:

package com.blingtel.ftp;

import java.io.File;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.impl.DefaultFtpServer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.blingtel.util.Global;

/**
 * <FTP SERVER操作类>
 * <功能详细描述>
 * @author  wenkaixuan
 * @version  [版本号, 2014-3-31]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class FtpServerListener implements ServletContextListener
{
    /**
     * 日志对象
     */
    private Log logger = LogFactory.getLog(FtpServerListener.class);
    
    /**
     * {@inheritDoc}
     */
    public void contextDestroyed(ServletContextEvent sce)
    {
        logger.error("Stopping FtpServer");
        DefaultFtpServer server = (DefaultFtpServer)sce.getServletContext().getAttribute("FTPSERVER_CONTEXT_NAME");
        if (server != null)
        {
            server.stop();
            sce.getServletContext().removeAttribute("FTPSERVER_CONTEXT_NAME");
            logger.error("FtpServer stopped");
        }
        else
        {
            logger.error("No running FtpServer found");
        }
    }
    
    /**
     * {@inheritDoc}
     */
    public void contextInitialized(ServletContextEvent sce)
    {
        logger.error("Starting FtpServer");
        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
        DefaultFtpServer server = (DefaultFtpServer)ctx.getBean("ftpServer");
        sce.getServletContext().setAttribute("FTPSERVER_CONTEXT_NAME", server);
        try
        {
            // 获取操作系统
            String osName = System.getProperty("os.name");
            
            // 如果是windows系統
            if (osName.toLowerCase().indexOf("windows") > -1)
            {
                // 设置FTP路径
                Global.ftpPath = "C:\\ftpServer";
            }
            else
            {
                // 设置FTP路径
                Global.ftpPath = "/home/ftpServer";
            }
            
            // 判断该路径是否存在,如果不存在则创建
            File file = new File(Global.ftpPath);
            if (!file.exists())
            {
                file.mkdirs();
            }
            
            // 更新FTP服务器用户信息
            // 首先获取到FTP用户管理对象
            UserManager userManage = server.getUserManager();
            
            // 删除原有的用户信息
            userManage.delete(Global.ftpUserName);
            
            // 构造新的用户并保存到数据库
            BaseUser base = new BaseUser();
            base.setName(Global.ftpUserName);
            base.setPassword(Global.ftpPassword);
            base.setHomeDirectory(Global.ftpPath);
            userManage.save(base);
            
            // 启动FTP服务
            server.start();
            logger.error("FtpServer started");
        }
        catch (Exception e)
        {
            logger.error("Failed to start FtpServer");
            logger.error(Global.LOG_EXCEPTION_NAME, e);
        }
    }
}

 在web.xml中配置该监听器,代码如下:

<!-- Spring 容器启动监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		<listener-class>com.blingtel.ftp.FtpServerListener</listener-class>
	</listener>

 

 第五步:建立FTP用户实体类,用于实现用户的增删查,该实体类必须要实现User接口,代码如下:

package com.blingtel.ftp;

import java.util.List;

import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.AuthorizationRequest;
import org.apache.ftpserver.ftplet.User;

/**
 * <一句话功能简述>
 * <功能详细描述>
 * @author  wenkaixuan
 * @version  [版本号, 2014-3-31]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class BaseUser implements User
{
    private String name;
    
    private String password;
    
    private String homeDirectory;
    
    public void setName(String name)
    {
        this.name = name;
    }
    
    public void setPassword(String password)
    {
        this.password = password;
    }
    
    public void setHomeDirectory(String homeDirectory)
    {
        this.homeDirectory = homeDirectory;
    }
    
    public AuthorizationRequest authorize(AuthorizationRequest arg0)
    {
        return null;
    }
    
    public List<Authority> getAuthorities()
    {
        return null;
    }
    
    public List<Authority> getAuthorities(Class<? extends Authority> arg0)
    {
        return null;
    }
    
    public boolean getEnabled()
    {
        return true;
    }
    
    public String getHomeDirectory()
    {
        return homeDirectory;
    }
    
    public int getMaxIdleTime()
    {
        return 0;
    }
    
    public String getName()
    {
        return name;
    }
    
    public String getPassword()
    {
        return password;
    }
    
    /**
     * @return 返回 writepermission
     */
    public boolean getWritePermission()
    {
        return true;
    }
}

 

 通过以上代码就可以实现FTP服务跟随项目的的启动而启动,停止而停止,并且在FTP服务启动时可以添加一个名称是Global.ftpUserName的用户到数据库

 

另外,FTP用户表结构如下:

#FTP用户信息表
create table FtpUser
(
   userid varchar(64) not null primary key,
   userpassword varchar(64),
   homedirectory varchar(128) not null,
   enableflag boolean default true,
   writepermission boolean default false,
   idletime int default 0,
   uploadrate int default 0,
   downloadrate int default 0,
   maxloginnumber int default 0,
   maxloginperip int default 0
);

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Apache FTPServer的配置使用

    Apache FtpServer 可以与 Spring 框架集成,以便在 Web 应用程序中使用 FTP 服务。 ### 基于 commons-net 的文件上传下载 commons-net 库提供了文件上传下载的功能,可以与 Apache FtpServer 集成,以便实现文件...

    Apache FtpServer配置详解

    从零开始介绍Apache FtpServer,并一步一步教你配置Apache FtpServer,更高级的应用,教你用写代码控制Apache FtpServer及集成到自己的应用中 &lt;!--ftp端口 --&gt; &lt;!--绑定的服务器IP地址,多网卡的时候使用...

    apache FTPserver 安装包

    2. **可扩展性**:Apache FTPServer基于Mina网络应用框架,具有高度可扩展性。用户可以编写自定义模块来扩展其功能,如认证、授权、日志记录等。 3. **模块化设计**:服务器由多个模块组成,每个模块负责特定的功能...

    基于Apache FtpServer 的Ftp服务器实现

    在本场景中,我们重点讨论如何利用Apache FtpServer与Spring框架集成来搭建一个功能强大的FTP服务器。 首先,Apache FtpServer的核心组件包括FtpServerFactory和FtpServer,它们分别用于创建FTP服务器实例和启动...

    apache ftpserver笔记

    Apache FTPServer是一款开源的FTP服务器软件,它是Apache MINA项目的一部分,用于构建高性能、可扩展的网络应用。这篇笔记主要围绕Apache FTPServer的使用、配置和相关开发进行讲解。 首先,Apache FTPServer提供了...

    Apache Ftpserver 全套

    Apache Ftpserver是一款开源的FTP服务器软件,由Apache软件基金会维护。它提供了高度可配置性和模块化设计,使得用户可以根据需求定制自己的FTP服务环境。在本资料包中,你将获得Apache Ftpserver的全套资源,包括...

    apache-ftpserver-1.1.1.zip

    Apache FTPServer是一款开源的FTP(File Transfer Protocol)服务器软件,主要负责在互联网上进行文件传输。这个特定的压缩包“apache-ftpserver-1.1.1.zip”包含了该服务器软件的v1.1.1版本,适用于Linux和Windows...

    apache ftpserver jar包

    Apache FtpServer是一款开源的FTP服务器,它基于Java实现,提供了灵活且强大的配置方式,能够方便地集成到各种系统环境中,比如与Spring框架的整合。Apache FtpServer的核心设计目标是提供一个轻量级、高性能且易于...

    apache ftpserver Mysql配置

    Apache FTPServer是一款开源的FTP服务器,它允许...通过上述步骤,你将能够成功配置Apache FTPServer与Mysql的集成,实现基于数据库的用户管理和权限控制。这样的配置不仅便于管理大量用户,还能提供更高级的安全特性。

    apache ftpserver讲解

    - **用户管理器**:设置为 `&lt;userManager class="org.apache.ftpserver.usermanager.impl.DatabaseUserManager"/&gt;` 以便于与数据库进行集成。 - **虚拟主机**:定义 `&lt;virtualHost&gt;` 元素来指定服务器的虚拟主机...

    Apache_FtpServer配置详解

    Apache_FtpServer配置详解

    Apache Ftp Server使用说明

    1. 下载:首先,你需要从Apache官方网站(http://mina.apache.org/ftpserver/download.html)下载最新版本的Apache FtpServer。 2. 解压:下载后,将压缩包解压到任意目录。 3. 配置环境变量:为了方便运行,你可以...

    Apache FtpServer 1.0.6

    Apache FtpServer是一个100%纯Java的、基于现有开放式协议基础上、完整、小巧的FTP服务器。此外,FtpServer还可以作为Windows服务器、Unix / Linux后台程序或是被嵌入在Java应用程序而独立运行。有了MINA...

    Apache FtpServer详细配置.zip

    Apache FtpServer是一款开源的FTP服务器,它基于Java平台,为用户提供了一种灵活且可扩展的方式来搭建和管理FTP服务。Apache FtpServer以其强大的功能、良好的稳定性和丰富的配置选项深受IT专业人士的喜爱。以下是对...

    apache ftpserver使用讲解

    - `org\apache\ftpserver\usermanager\impl\AbstractUserManager.class` 修改这些类的主要目的是让其支持新的表结构,并实现在验证过程中对源IP地址的检查。 通过以上步骤,我们可以有效地配置并使用Apache FTP...

    apache-ftpserver整合spring,并使用mysql作为用户数据库查询

    总结来说,"apache-ftpserver整合spring,并使用mysql作为用户数据库查询"是一个实现FTP服务的解决方案,它利用Spring框架的灵活性和MySQL数据库的可靠性,提供了一个高效且可扩展的FTP服务架构。用户只需按照项目...

    (转)Java使用Apache FtpServer实现嵌入式FTP服务器

    它的使用方式与Apache FtpServer类似,需要添加依赖并调用相应的API方法。 总结起来,Apache FtpServer是Java开发人员实现FTP服务器功能的一个强大工具。通过简单的配置和API调用,我们可以轻松地在Java应用中嵌入...

    apache ftp server

    Apache FTP Server是一个开源的FTP服务器,它允许用户通过FTP协议上传、下载文件。这个服务器是用Java语言编写的,因此可以在任何支持Java的平台上运行,包括Windows、Linux、Unix等操作系统。Apache FTP Server的...

    apache ftpserver

    6. **日志记录**:Apache FTPServer可以与各种日志框架集成,如Log4j,提供详细的审计日志,便于追踪和分析服务器的运行情况。 7. **虚拟主机**:FTPServer支持虚拟主机功能,允许在一个服务器上运行多个独立的FTP...

Global site tag (gtag.js) - Google Analytics