先来简单介绍一下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编写的程序,所以程序部分windows和linux,解压后在程序的bin目录下有这样一系列的可执行文件。其中ftpd.bat和ftpd.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,更高级的应用,教你用写代码控制Apache FtpServer及集成到自己的应用中 <!--ftp端口 --> <!--绑定的服务器IP地址,多网卡的时候使用...
Apache Ftpserver 全套,包括源码, jar包 及配置说明,需要的就下载吧
Apache FtpServer是一个100%纯Java的、基于现有开放式协议基础上、完整、小巧的FTP服务器。此外,FtpServer还可以作为Windows服务器、Unix / Linux后台程序或是被嵌入在Java应用程序而独立运行。有了MINA...
apache ftpserver使用讲解,可以配置ftpserver与项目的数据库进行连接,对ftp用户的用户名、密码进行校验,校验通过后可以访问表中配置好的访问路径。
apache ftpserver Mysql配置
apache-ftpserver apache-ftpserver apache-ftpserver
apache ftpserver使用讲解,可以配置ftpserver与项目的数据库进行连接,对ftp用户的用户名、密码进行校验,校验通过后可以访问表中配置好的访问路径。
基于Apache FtpServer 的Ftp服务器实现,使用了srping集成的方式来实现的。
用Java调用apache.ftpserver.FtpServer相关API完成FTP的被动模式实现。
Apache_FtpServer配置详解
apache ftpserver 源码嵌入eclipse工程版,所有配置已配好,myserver.java右键 run as java aplication 运行即可。登录名:admin 密码:admin 还有一个名字一样的资源,也是我上传的,那个账号找不回来了
这是在eclipse上创建的项目,下载源码包导入即可。 在运行之前自己在MySQL上创建数据库,名如:ftpserver,再导入里面提供的...有了这套源码,不出十分钟你就可以搞懂怎么在你的Spring项目里面整合Apache FTPServer了。
该资源提供了与Apache配合使用的FTP服务器安装包,支持FTP服务的构建。
apache ftpserver project
Apache FtpServer详细配置
NULL 博文链接:https://self4j.iteye.com/blog/910701
https://blog.csdn.net/feiwei/article/details/5867555 根据这个博客重新编译的,可以解决IE访问Apache Ftp Server 中文目录、中文文件名乱码的问题
JavaWeb集群环境下的FTP文件服务器配置使用
Android FTP server 用org.apache.ftpserver实现, 可以设置端口号, 匿名或用户名密码 https://blog.csdn.net/weixin_42065195/article/details/106944004