主程序
/**
* 启动日志
*/
PropertyConfigurator.configure("E://log4j.properties");
/**
* FtpServerFactory
*/
FtpServerFactory serverFactory = new FtpServerFactory();
/**
* 设置连接信息
* 如最大连接数,线程数等
*/
serverFactory.setConnectionConfig(new ConnectionConfigImp());
ListenerFactory listenerFactory = new ListenerFactory();
/**
* 设置端口
*/
listenerFactory.setPort(55533);
/**
* 可以监测客户端登录等一些列操作
*/
serverFactory.setFtplets(getFtplets());
/**
* 配置ssl
*/
listenerFactory.setSslConfiguration(getSSLConfigration());
/**
* 这个方法我不知道什么意思
* 我觉得应该是要求必须有证书才能连接
*/
listenerFactory.setImplicitSsl(true);
Listener createListener = listenerFactory.createListener();
serverFactory.addListener("default", createListener);
/**
* 不需要接数据库的用户方法
*/
BaseUser baseUser = new BaseUser();
baseUser.setName("admin");
baseUser.setPassword("admin");
baseUser.setHomeDirectory("E://");
List<Authority>list = new ArrayList<Authority>();
/**
* 给用户添加写权限
*/
list.add(new WritePermission());
baseUser.setAuthorities(list);
/**
* 把用户添加到UuserManager
* 这里的UuserManager可以写很多个 可以在任意地方添加用户,并且添加完之后的用户立即生效
*/
serverFactory.getUserManager().save(baseUser);
/**
* 如果需要接数据库,则执行一下代码
*/
/*
*UserManager dbUserManagerSon = DbUserManagerSon.DbUserManagerSon();
*serverFactory.setUserManager(dbUserManagerSon);
*/
FtpServer createServer = serverFactory.createServer();
createServer.start();
方法
/***
*
* @return
*/
private static Map<String, Ftplet> getFtplets() {
Map<String, Ftplet> map = new HashMap<>();
Ftplet ftplet = new Ftplet() {
@Override
public FtpletResult onDisconnect(FtpSession arg0) throws FtpException,IOException {
logFactory.info("__________________________________________________________________onDisconnect____________________________________________________________________________________");
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult onConnect(FtpSession arg0) throws FtpException, IOException {
logFactory.info("__________________________________________________________________onConnect____________________________________________________________________________________");
return FtpletResult.DEFAULT;
}
@Override
public void init(FtpletContext arg0) throws FtpException {
logFactory.info("__________________________________________________________________init____________________________________________________________________________________");
}
@Override
public void destroy() {
logFactory.info("__________________________________________________________________destroy____________________________________________________________________________________");
}
@Override
public FtpletResult beforeCommand(FtpSession arg0, FtpRequest arg1)throws FtpException, IOException {
logFactory.info("__________________________________________________________________beforeCommand____________________________________________________________________________________");
logFactory.info(arg0.getUserArgument());
logFactory.info(arg0.getClientAddress().toString());
logFactory.info(arg0.getConnectionTime().toGMTString());
logFactory.info(arg0.getDataType());
logFactory.info(arg0.getLanguage());
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult afterCommand(FtpSession arg0, FtpRequest arg1,FtpReply arg2) throws FtpException, IOException {
logFactory.info("__________________________________________________________________afterCommand____________________________________________________________________________________");
return FtpletResult.DEFAULT;
}
};
map.put("miaFtplet",ftplet);
return map;
}
/**
* getSSLConfigration
* @return SslConfiguration
*/
public static SslConfiguration getSSLConfigration(){
SslConfigurationFactory ssl =new SslConfigurationFactory();
ssl.setKeystoreType("jks");
ssl.setKeystoreFile(new File("E://liuyunpeng.jks"));
ssl.setKeyAlias("liuyunpeng");
ssl.setKeystorePassword("123456");
ssl.setClientAuthentication("true");
SslConfiguration createSslConfiguration = ssl.createSslConfiguration();
return createSslConfiguration;
}
}
/**
* USERMANGER接数据库配置信息
* @author liuyunpeng
*
*/
class DbUserManagerSon{
/***
*这里sql语句是乱写的
*/
private static String selectAllStmt = "SELECT USER_ID FROM FTP_USER";
private static String selectUserStmt = "SELECT USER_ID,USER_PASSWORD,HOME_DIRECTORY,EBAVKEFLAG FROM FTP_USER WHERE USER_ID=USER_ID";
private static String updateUserStmt = "UPDATE FTP_USER SET USER_ID =USER_ID WHERE USER_ID=USER_ID";
private static String deleteUserStmt = "DELETE FROM FTP_USER WHERE USER_ID = USER_ID";
private static String insertUserStmt = "INSERT INTO FTP_USER";
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* FTP_USER数据库所需要的字段 *
* 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 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/**
*
* @return
*/
public static UserManager DbUserManagerSon(){
DbUserManagerFactory dbUserManagerFactory = new DbUserManagerFactory();
dbUserManagerFactory.setDataSource(getDataSource());
dbUserManagerFactory.setSqlUserSelect(selectUserStmt);
dbUserManagerFactory.setSqlUserSelectAll(selectAllStmt);
dbUserManagerFactory.setSqlUserInsert(insertUserStmt);
dbUserManagerFactory.setSqlUserUpdate(updateUserStmt);
dbUserManagerFactory.setSqlUserDelete(deleteUserStmt);
UserManager createUserManager = dbUserManagerFactory.createUserManager();
return createUserManager;
}
/**
* 配置datasource
* @return
*/
public static DataSource getDataSource(){
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://localhost/ftpserver");
basicDataSource.setUsername("root");
basicDataSource.setPassword("123456");
return basicDataSource;
}
}
/**
* 连接信息配置
* @author liuyunpeng
*
*/
class ConnectionConfigImp implements ConnectionConfig{
/**
* 不允许匿名用户登录
*/
public boolean isAnonymousLoginEnabled() {
return false;
}
/***
* 设置最大线程
*/
public int getMaxThreads() {
return 1000;
}
/**
* 设置最大登录
*/
public int getMaxLogins() {
return 1000;
}
/**
* 设置登录失败次数
*/
public int getMaxLoginFailures() {
return 5;
}
public int getMaxAnonymousLogins() {
return 0;
}
/**
* 最多失败次数
*/
public int getLoginFailureDelay() {
return 5;
}