APACHE基于MINA的FTP SERVER(一)配置文件装载

APACHE基于MINA的FTP SERVER(一)配置文件装载

首页
http://mina.apache.org/ftpserver/index.html

参考官方文档,简单的实现了FTP的服务端功能,没有测试性能如何。
里面比较多的代码是引入了XML的stax解析。

FTP的XML配置文件ftpserver.xml。
文件主体
<?xml version="1.0" encoding="UTF-8"?>
<ftpserver>
<permissions>
   <permission name="writePermission" type="WritePermission"></permission>
   <permission name="connAdmin" type="ConcurrentLoginPermission"
    connPerUser="20" connPerIp="20"></permission>
   <permission name="rateAdmin" type="TransferRatePermission"
    downloadRate="102400" uploadRate="204800"></permission>
</permissions>
<users>
   <user name="admin" password="admin" homeDirectory="E:\\work\\ftp\\admin"
    enabled="true" maxIdleTime="180">
    <userPermissions>writePermission,connAdmin,rateAdmin</userPermissions>
   </user>
   <user name="anonymous" password="anonymous" homeDirectory="E:\\work\\ftp\\anonymous"
    enabled="true" maxIdleTime="60">
    <userPermissions>writePermission,connAdmin,rateAdmin</userPermissions>
   </user>
</users>
<servers>
   <server name="ftpsillycat" port="2221" passwordEncryptor="CLEAR_TEXT">
    <serverUsers>admin,anonymous</serverUsers>
   </server>
</servers>
</ftpserver>
权限标签
<permissions>标签是定义各个权限的,比如writePermission读写权限,connAdmin管理员的连接权限,单个用户20个连接,单IP20个连接。
rateAdmin是管理员上传下载速率权限,下行102400byte,上行204800byte
用户标签
<users>标签是定义了用户的用户名,密码,登陆后的默认文件夹,用户具有哪些权限
服务器标签
<server>标签定义服务器的名字,端口,密码加密方式,服务器上有哪些用户。

引入的JAR包
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>

在JAVA中,定义了类来对应这个配置文件。
服务器定义类FtpServerConfig.java
public class FtpServerConfig {
//sever名称
private String name;
//server端口
private int port;
//密码加密类型
private String passwordEncryptor;
//用户
private List<UserServerConfig> users;
...
}
用户定义类UserServerConfig.java
public class UserServerConfig {
private String name;

private String password;

private String homeDirectory;

private boolean enabled;

private int maxIdleTime;

private List<Authority> permissions;
...
}
解析XML的工具类XmlResourceUtil.java
while (r.hasNext()) {
XMLEvent event = r.nextEvent();
if (event.isStartElement()) {
   StartElement start = event.asStartElement();
   String tag = start.getName().getLocalPart();
//循环,得到XML文件中每个标签
if (tag.equalsIgnoreCase("server")) {
//检查标签是否是server
ftpServerConfig = new FtpServerConfig();
if (start.getAttributeByName(new QName("", "name")) != null) {
   String str = start.getAttributeByName(new QName("", "name")).getValue();
   ftpServerConfig.setName(str);
}
if (start.getAttributeByName(new QName("", "port")) != null) {
   int port = Integer.valueOf(start.getAttributeByName(new QName("", "port")).getValue()).intValue();
    ftpServerConfig.setPort(port);
   }
   if (start.getAttributeByName(new QName("","passwordEncryptor")) != null) {
    String str = start.getAttributeByName(new QName("", "passwordEncryptor")).getValue();
    ftpServerConfig.setPasswordEncryptor(str);
   }
}
}

你可能感兴趣的:(apache,spring,xml,配置管理,Mina)