APACHE基于MINA的FTP SERVER(二)服务器初始化

APACHE基于MINA的FTP SERVER(二)服务器初始化

需要引入的JAR包
<dependency>
<groupId>org.apache.ftpserver</groupId>
<artifactId>ftpserver-core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>

web.xml配置启动时调用spring初始化
<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>

spring配置调用核心类FtpServerServiceImpl初始化FTP的SERVER池
<beans default-autowire="byName">
<bean name="ftpServerService" class="com.sillycat.easyftp.server.impl.FtpServerServiceImpl"
init-method="init">
<property name="configFile" value="${ftpserver.config.file}" />
</bean>
</beans>

单元测试中
public void testStop() {
FtpServerService ftpServerService = (FtpServerService) appContext.getBean("ftpServerService");
//停止名字为ftpsillycat的server
ftpServerService.stop("ftpsillycat");
}

服务器的初始化的核心类FtpServerServiceImpl.java,代码如下:
package com.sillycat.easyftp.server.impl;

import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

import javax.xml.stream.XMLInputFactory;

import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
import org.apache.ftpserver.usermanager.Md5PasswordEncryptor;
import org.apache.ftpserver.usermanager.PasswordEncryptor;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;

import com.sillycat.easybase.base.BaseManager;
import com.sillycat.easybase.constants.FtpConstants;
import com.sillycat.easyftp.config.FtpServerConfig;
import com.sillycat.easyftp.config.UserServerConfig;
import com.sillycat.easyftp.server.FtpServerService;
import com.sillycat.easyftp.utils.XmlResourceUtil;

public class FtpServerServiceImpl extends BaseManager implements
FtpServerService {
//ftp服务器的池
private ConcurrentHashMap<String, FtpServer> ftpServerPool;
//配置集合
private List<FtpServerConfig> ftpServerConfigs;
//读取的XML配置文件
private String configFile;
//启动服务器
public void start(String name) {
FtpServer ftpServer = ftpServerPool.get(name);
try {
ftpServer.start();
} catch (FtpException e) {
e.printStackTrace();
}
}
//停止服务器
public void stop(String name) {
FtpServer ftpServer = ftpServerPool.get(name);
ftpServer.stop();
}
//重启服务器
public void resume(String name) {
FtpServer ftpServer = ftpServerPool.get(name);
ftpServer.resume();
}
//暂停服务器
public void suspend(String name) {
FtpServer ftpServer = ftpServerPool.get(name);
ftpServer.suspend();
}

public void init() {
// 初始化变量
ftpServerPool = new ConcurrentHashMap<String, FtpServer>();
ftpServerConfigs = new ArrayList<FtpServerConfig>();
// 装在配置文件
loadConfig();
if (ftpServerConfigs != null && !ftpServerConfigs.isEmpty()) {
initFtpServerPool();
} else {
logger.error("no config info for FtpServerServiceImpl!");
throw new RuntimeException(
"no config info for FtpServerServiceImpl!");
}
}
//初始化FTP服务器池
public void initFtpServerPool() {
for (int i = 0; i < ftpServerConfigs.size(); i++) {
FtpServerConfig ftpServerConfig = ftpServerConfigs.get(i);
this.addFtpServer(ftpServerConfig);
}
if(ftpServerPool != null && !ftpServerPool.isEmpty()){
Iterator<String> itKey = ftpServerPool.keySet().iterator();
for(;itKey.hasNext();){
String key = itKey.next();
FtpServer tmp = ftpServerPool.get(key);
if(tmp != null){
try {
tmp.start();
logger.info("ftp server " + key + " start!");
} catch (FtpException e) {
e.printStackTrace();
}
}
}
}
}

//读取配置文件
public void loadConfig() {
URL url = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
url = loader.getResource(this.getConfigFile());
XMLInputFactory factory = XMLInputFactory.newInstance();
if (url == null) {
logger
.error("no ftpserver config find! please put ftpserver.xml in your classpath");
throw new java.lang.RuntimeException(
"no ftpserver config find! please put ftpserver.xml in your classpath");
}

XmlResourceUtil.loadFtpServerConfigFromURL(url, factory,
ftpServerConfigs);
logger.info(new StringBuffer().append("load config from :").append(
url.getFile()));
}

private void addFtpServer(FtpServerConfig ftpServerConfig) {
FtpServerFactory ftpServerFactory = new FtpServerFactory();
// 设置监听端口
ListenerFactory linstenFactory = new ListenerFactory();
linstenFactory.setPort(ftpServerConfig.getPort());
ftpServerFactory
.addListener("default", linstenFactory.createListener());

// 密码加密类型
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
PasswordEncryptor passwordEncryptor = null;
if (FtpConstants.CLEAR_TEXT_FTP_PASSWORD_ENCRYPTOR
.equalsIgnoreCase(ftpServerConfig.getPasswordEncryptor())) {
passwordEncryptor = new ClearTextPasswordEncryptor();
} else if (FtpConstants.SALTED_FTP_PASSWORD_ENCRYPTOR
.equalsIgnoreCase(ftpServerConfig.getPasswordEncryptor())) {
passwordEncryptor = new SaltedPasswordEncryptor();
} else if (FtpConstants.MD5_FTP_PASSWORD_ENCRYPTOR
.equalsIgnoreCase(ftpServerConfig.getPasswordEncryptor())) {
passwordEncryptor = new Md5PasswordEncryptor();
}
userManagerFactory.setPasswordEncryptor(passwordEncryptor);
// 用户
UserManager um = userManagerFactory.createUserManager();
if (ftpServerConfig.getUsers() != null
&& !ftpServerConfig.getUsers().isEmpty()) {
for (int i = 0; i < ftpServerConfig.getUsers().size(); i++) {
UserServerConfig tmp = ftpServerConfig.getUsers().get(i);
addFtpUser(tmp, um);
}
}
ftpServerFactory.setUserManager(um);
FtpServer server = ftpServerFactory.createServer();
ftpServerPool.put(ftpServerConfig.getName(), server);
}

private void addFtpUser(UserServerConfig userServerConfig, UserManager um) {
BaseUser user = new BaseUser();
user.setName(userServerConfig.getName());
user.setPassword(userServerConfig.getPassword());
user.setHomeDirectory(userServerConfig.getHomeDirectory());
user.setEnabled(userServerConfig.getEnabled());
user.setMaxIdleTime(userServerConfig.getMaxIdleTime());

if (userServerConfig.getPermissions() != null
&& !userServerConfig.getPermissions().isEmpty()) {
//权限
user.setAuthorities(userServerConfig.getPermissions());
}
try {
um.save(user);
} catch (FtpException e) {
e.printStackTrace();
}
}

public String getConfigFile() {
return configFile;
}

public void setConfigFile(String configFile) {
this.configFile = configFile;
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值