`
han_zw
  • 浏览: 174419 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

利用Apache ftp server 为你的程序提供FTP服务

阅读更多

先来简单介绍一下apache ftp server吧,顾名思义这个是Apache下的一个东东,个人感觉还是很新的,到现在才是1.0.X,不过还是相信Apache的品牌效应,这个东东用起来还是很方便的,通过配置文件可以对ftp服务相关参数进行灵活配置,能够支持基于配置文件和数据库的两种用户权限管理,另外还支持SSL协议和数字证书机制。

下面是官网的简单介绍:

The Apache FtpServer is a 100% pure Java FTP server. It's designed to be a complete and portable FTP server engine solution based on currently available open protocols. FtpServer can be run standalone as a Windows service or Unix/Linux daemon, or embedded into a Java application. We also provide support for integration within Spring applications and provide our releases as OSGi bundles.

接下来我就按三部分介绍apache ftp server的使用。

1.       独立部署apache ftp server作为系统服务

2.       作为为window系统的服务

3.       结合spring配置嵌入我们自己的系统

注:因为Apache FTP Server名字写起来太长,以下简称为AFS.

1.       独立部署AFS

1.1    安装AFS http://mina.apache.org/ftpserver/

我用的版本是1.0.4, 本文就以该版本为例。无需安装下载后直接解压即可。

       因为是纯java编写的程序,所以程序部分windowslinux,解压后在程序的bin目录下有这样一系列的可执行文件。其中ftpd.batftpd.sh分别是windows平台和linux下的启动命令。

 

1.2 启动AFS
AFS启动时可以指定使用的具体的配置文件,例如:
bin/ftpd.bat res/conf/ftpd-typical.xml
如果未指定配置文件,那么会默认用自带的res/conf/ftpd-full.xml文件作为配置文件。
到此为止,一个ftp server就已经运行起来了。

 

1.3 AFS的配置
1.3.1 AFS配置文件详解

 以AFS自带的配置文件ftpd-full.xml为例加以介绍。ftpd-full.xml路径为$AFS_HOME\res\conf\ftpd-full.xml.
文件内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
	   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
	   http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd	
	   "
	id="myServer">
	<!--
		Use this section to define custom listeners, or to redefine the
		default listener, aptly named "default"
	-->
	<listeners>
		<nio-listener name="default" port="2222" implicit-ssl="true"
			idle-timeout="60" local-address="1.2.3.4">
			<ssl>
				<keystore file="mykeystore.jks" password="secret"
					key-password="otherSecret" />
				<truststore file="mytruststore.jks" password="secret" />
			</ssl>
			<data-connection idle-timeout="60">
				<active enabled="true" local-address="1.2.3.4" local-port="2323"
					ip-check="true" />
				<passive ports="123-125" address="1.2.3.4" external-address="1.2.3.4" />
			</data-connection>
			<blacklist>1.2.3.0/16, 1.2.4.0/16, 1.2.3.4</blacklist>
		</nio-listener>
	</listeners>
	<!--
		Use this section to define your Ftplets, they are configured like
		regular Spring beans
	-->
	<ftplets>
		<ftplet name="ftplet1">
			<beans:bean class="org.apache.ftpserver.examples.MyFtplet">
				<beans:property name="foo" value="123" />
			</beans:bean>
		</ftplet>
	</ftplets>
	<!-- The user manager, choose one -->
	<file-user-manager file="users.properties"
		encrypt-passwords="true" />
	<!--<db-user-manager>
		<data-source>
			<beans:bean class="some.datasoure.class" />
		</data-source>
		<insert-user>INSERT INTO FTP_USER (userid, userpassword,
			homedirectory, enableflag, writepermission, idletime, uploadrate,
			downloadrate) VALUES ('{userid}', '{userpassword}',
			'{homedirectory}',
			{enableflag}, {writepermission}, {idletime},
			{uploadrate},
			{downloadrate})
		</insert-user>
			<update-user>UPDATE FTP_USER SET
				userpassword='{userpassword}',homedirectory='{homedirectory}',enableflag={enableflag},writepermission={writepermission},idletime={idletime},uploadrate={uploadrate},downloadrate={downloadrate}
				WHERE userid='{userid}'
		</update-user>
			<delete-user>DELETE FROM FTP_USER WHERE userid = '{userid}'
		</delete-user>
			<select-user>SELECT userid, userpassword, homedirectory,
				enableflag, writepermission, idletime, uploadrate, downloadrate,
				maxloginnumber, maxloginperip FROM
				FTP_USER WHERE userid = '{userid}'
		</select-user>
			<select-all-users>SELECT userid FROM FTP_USER ORDER BY userid
		</select-all-users>
			<is-admin>SELECT userid FROM FTP_USER WHERE userid='{userid}'
				AND
				userid='admin'
		</is-admin>
			<authenticate>SELECT userpassword from FTP_USER WHERE
				userid='{userid}'</authenticate>
	</db-user-manager> -->
	<!-- The file system -->
	<native-filesystem case-insensitive="false"
		create-home="true" />
	<!--
		Use this section to define custom commands. Custom commands can also
		override already existing commands
	-->
	<commands use-default="false">
		<command name="MYHELP">
			<beans:bean class="org.apache.ftpserver.examples.MYHELP" />
		</command>
	</commands>
	<!-- Define the available languages -->
	<messages languages="se, no ,da" />
</server>

 

1.3.1.1 server的配置
 这一部分在官网写的很清楚,可以查看http://mina.apache.org/ftpserver/configuration.html。在这里本人凭借英语四级的水平斗胆翻译一下。

 

属性

描述

必填

默认值

id

配置的server在该XML文件中的唯一标识

 

max-logins

最大同时在线用户数

10

max-anon-logins

最大同时在线匿名用户数

10

anon-enabled

是否启动匿名登录

true

max-login-failures

最大登录失败次数,达到该次数后连接自动断开。

3

login-failure-delay

失败登录后连接延迟时间(以毫秒为单位)。防止恶意用户暴力破解密码。

500

 

 

 

1.3.1.2 listeners 配置
 Listeners组件是负责在ftp server指定的端口上监听client端创建连接和执行命令。一个AFS可以同时有多个listeners。Listeners以name属性作为唯一标识,默认的listener的name为”default”.

 

Attribute

Description

Required

Default value

name

Listener名称,如果设定listener名称为“default”,那么该listener的设置会覆盖默认的listner

 

port

Listener监听的端口

21

local-address

Server 绑定的本地服务地址

All available

implicit-ssl

是否实现SSL的支持

false

idle-timeout

空闲连接保持连接状态的时长(单位为秒).

300

 

1.3.2 AFS权限控制
 AFS的权限控制有两种方式:文件控制和数据库控制。


1.3.2.1 文件控制权限的配置
通过文件控制只需在server的配置文件中添加以下配置

<file-user-manager file="users.properties" encrypt-passwords="true" />

 

其中users.properties文件权限控制文件,encrypt-passwords可以指定密码存储的方式,有效值包括“clear”(明文),“md5”,”salted”,这个salted不知道是什么意思,应该和MD5类似吧,估计也是一种加密标准,而且官方鼓励使用salted.
AFS在安装时就提供了一个默认的users.properties文件,配置项一目了然。

 

1.3.2.1 数据库控制权限
数据库对用户的权限的管理与通过文件类似,不同就是把对用户的配置移到了数据库的表里面。而且AFS提供了建表的sql语句,文件存放在res下的ftp-db.sql。
关于此处的相关配置可以参见上面的完成配置实例,该部分的需要配置insert-user,update-user,delete-user,select-user,select-all-users,is-admin,authenticate。一般情况下我们都会用我们不会单独用AFS来增删改用户,但是update-user、delete-user和insert-user一个都不能少,不然AFS启动时校验通不过。另外我们通常会希望AFS的用户管理与我们的应用系统采用统一管理,也就是不再为AFS建立专用的用户管理表,这时候我们可以通过修改select-user、is-admin、authenticate等配置项来完成。不要以为随便改写查询sql都可以哦,AFS在处理这几个查询时是通过类似rs.getString(列名)的形式获得记录的,也就是说无论我们怎么修改sql,但是数据列名或者别名一定要和AFS提供的默认查询语句匹配上,不然会有无效列名的错误。
关于AFS的配置大概就这些,总的来说各个配置项还是很直观的。现在我们就可以执行bin\ftpd.sh启动AFS了。

 

2.作为window系统的服务
如果是在windows平台的话,AFS还可以注册为windows的系统服务来运行。方法也很简单,直接执行:
<yourhome>bin\service install
运行成功后,进到windows的服务管理窗口就可以看到我们新注册的名为Apache FtpServer的服务了。当然服务名是可以指定的,只需:
<yourhome>bin\service install <your服务名>
此时创建的服务名就为Apache Ftp Servef <你指定的服务名>
如果我们想注册服务时用特定的配置文件可以执行如下命令:
<yourhome>bin\service install <your服务名> <你需要执行的文件路径>
卸载已经注册的windows服务只需:
<yourhome>bin\service remove <your服务名(不输入为默认)>

 

 

3.结合spring配置嵌入我们自己的系统
以上我们介绍的是独立部署AFS,其实AFS还可以结合spring嵌入到我们的应用程序中。
修改web.xml文件添加spring的相关配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:/applicationContext*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

 

 

 src目录下建立spring配置文件applicationContext-ftpserver.xml
配置方法与前面提到的server配置参数相同,只是此时的server作为spring的一个bean来处理。格式如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	">
	<description>ftpserver demo</description>
	<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jdbc/etlui"/>
    </bean>
	<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
			xmlns:beans="http://www.springframework.org/schema/beans" 
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
	   		http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
	    id="demoserver" 	
	    max-logins="500"
		anon-enabled="false"
		max-anon-logins="123"
		max-login-failures="124"
		login-failure-delay="125">
--具体配置参数
</server>
<bean id="ctroller" class="com.harvey.ftpd.ServiceController" init-method="init">
		<property name="server">
			<ref bean="demoserver"/>
		</property>
		<property name="server2">
			<ref bean="demoserver2"/>
		</property>
		
	</bean>
</beans>

 

其中ServiceController代码如下:

public class ServiceController {
	private FtpServer server = null;
	
	public void init() {
		try {
			server.start();
		} catch (FtpException e) {
			e.printStackTrace();
		}
		System.out.println("system exit");
	}

	public FtpServer getServer() {
		return server;
	}

	public void setServer(FtpServer server) {
		this.server = server;
	}

}

 

 

 

 

现在我们就可以将AFS纳入到我们的应用程序的管理范畴之内。
另外再说些其他的,因为server作为spring的一个bean来处理,所以可以配置多个server,也就是为主机配置多个AFS server,虽然可以这样的配置,但是觉得也没有这种必要,只是觉得好玩可以配一下。

 

分享到:
评论

相关推荐

    apache FTPserver 安装包

    Apache FTPServer是一款开源的FTP服务器软件,它是Apache软件基金会的一部分,设计用于提供可靠且高效的文件传输服务。在本文中,我们将深入探讨如何安装和配置Apache FTPServer,以及它的一些核心特性。 首先,让...

    Apache FtpServer配置详解

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

    Apache FTPServer的配置使用

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

    Apache Ftpserver 全套

    总之,这个压缩包提供了从基础到高级的所有必要资源,让你能够全面掌握Apache Ftpserver的使用和定制。无论是作为开发者还是管理员,你都可以通过这份资料深化对FTP服务器工作的理解,并实现高效的FTP服务部署。

    apache ftpserver笔记

    首先,Apache FTPServer提供了灵活的配置机制,允许管理员通过XML文件定制服务器的行为。这包括设置用户账户、指定工作目录、限制上传下载速度以及启用SSL/TLS加密等。在配置过程中,我们需要了解FTP服务器的基本...

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

    Apache FtpServer是一个开源项目,它提供了一个轻量级且可嵌入的FTP服务器,允许开发者在Java应用程序中直接启动和管理FTP服务。 首先,我们需要了解FTP(File Transfer Protocol)的基本概念。FTP是一种用于在网络...

    Java 嵌入apache.ftpserver.FtpServer 实现FTP服务

    Java中的Apache FtpServer库为开发人员提供了一个强大的框架,用于在Java应用程序中轻松地创建和管理FTP服务器。Apache FtpServer提供了丰富的API,可以定制服务器的行为,满足各种需求。本篇文章将深入探讨如何利用...

    apache-ftpserver-1.1.1.zip

    总之,Apache FTPServer是一个强大且灵活的FTP服务器解决方案,无论是在个人项目还是企业环境中,都能提供可靠的服务。了解并熟练掌握其安装、配置和管理方法,对于提升网络文件传输的安全性和效率至关重要。

    apache ftpserver Mysql配置

    完成所有配置后,启动Apache FTPServer服务,并使用FTP客户端进行测试,验证用户能否成功登录,以及权限控制是否按预期工作。 9. **安全考虑** 记得对Mysql数据库进行安全配置,避免敏感信息泄露。同时,使用SSL/...

    Apache_FtpServer配置详解

    Apache_FtpServer配置详解

    apache ftpserver讲解

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

    Apache FtpServer 1.0.6

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

    Apache Ftp Server使用说明

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

    基于Apache FtpServer 的Ftp服务器实现

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

    Apache FtpServer详细配置.zip

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

    apache ftpserver使用讲解

    首先,需要访问官方提供的下载页面 [http://mina.apache.org/ftpserver/downloads.html](http://mina.apache.org/ftpserver/downloads.html),选择合适的版本进行下载。例如,可以选择 "ApacheFtpServer1.0.5...

    apache ftp server

    Apache FTP Server的设计目标是提供一个灵活、可扩展且安全的解决方案,适合企业级的文件传输需求。 在了解Apache FTP Server之前,我们先来认识一下FTP(File Transfer Protocol)。FTP是一种用于在网络上进行文件...

    apache ftpserver jar包

    Apache FtpServer的核心设计目标是提供一个轻量级、高性能且易于扩展的FTP服务解决方案。 在Java应用程序中使用Apache FtpServer时,你需要包含一系列的jar包来支持其运行。这些jar包包含了服务器本身的基础组件、...

    apache ftpserver

    Apache FTPServer是一个开源的FTP服务器项目,它提供了一个强大、灵活且可扩展的平台来管理文件传输服务。这个服务器是基于Java实现的,因此具备跨平台性,可以在多种操作系统上运行,包括Windows、Linux和Mac OS等...

    apache-ftpserver-1.0.6

    Apache FTPServer是一个开源的FTP服务器项目,源自Apache MINA项目,提供了一种高效且可扩展的方式来实现FTP(文件传输协议)服务。这个"apache-ftpserver-1.0.6"版本是该软件的一个特定发布版,包含了在该版本中所...

Global site tag (gtag.js) - Google Analytics