Skip to content

Commit c1df5df

Browse files
committed
feat: 支持连接相关配置
1 parent 5ea6aca commit c1df5df

File tree

8 files changed

+126
-17
lines changed

8 files changed

+126
-17
lines changed

README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
Note: This project is for personal learning only. Please use [Apache FtpServer 1.2.0 Release — Apache MINA](https://mina.apache.org/ftpserver-project/download_1_2.html) for production environment.
2+
13
![image-20240421225808979](README/image-20240421225808979.png)
24

35
# Introduction
@@ -17,11 +19,17 @@ java -jar ftp-server.jar
1719
you can configure ftp by configuring **server.properties**.
1820

1921
```properties
20-
port=201
21-
idleSeconds=501
22-
activeLocalPort=202
22+
port=21
23+
idleSeconds=60
24+
activeLocalPort=20
2325
passivePorts=30000-30005
24-
web.enable=true
26+
anonymousLoginEnabled=true
27+
loginFailureDelay=500
28+
maxLogins=1000
29+
maxAnonymousLogins=2
30+
maxLoginFailures=3
31+
maxThreads=0
32+
web.enable=false
2533
web.port=8080
2634
web.username=admin
2735
web.password=admin

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>top.meethigher</groupId>
88
<artifactId>ftp-server</artifactId>
9-
<version>1.3</version>
9+
<version>1.3.1</version>
1010
<properties>
1111
<project.name>ftp-server</project.name>
1212
<maven.compiler.source>8</maven.compiler.source>

server.properties

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
port=201
2-
idleSeconds=501
3-
activeLocalPort=202
1+
port=21
2+
idleSeconds=60
3+
activeLocalPort=20
44
passivePorts=30000-30005
5-
web.enable=true
5+
anonymousLoginEnabled=true
6+
loginFailureDelay=500
7+
maxLogins=1000
8+
maxAnonymousLogins=2
9+
maxLoginFailures=3
10+
maxThreads=0
11+
web.enable=false
612
web.port=8080
713
web.username=admin
814
web.password=admin

src/main/java/top/meethigher/ftp/server/Server.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package top.meethigher.ftp.server;
22

33

4+
import org.apache.ftpserver.ConnectionConfig;
45
import org.apache.ftpserver.ftplet.UserManager;
56
import org.apache.ftpserver.listener.Listener;
67
import org.apache.ftpserver.usermanager.impl.BaseUser;
@@ -21,8 +22,8 @@ public void run() throws Exception {
2122
List<BaseUser> baseUserList = baseUserList();
2223
UserManager um = userManager(baseUserList);
2324
Listener listener = listener(ftpServerProperties);
24-
25-
AuditFtpServer ftpServer = ftpServer(listener, um);
25+
ConnectionConfig connectionConfig = connectionConfig(ftpServerProperties);
26+
AuditFtpServer ftpServer = ftpServer(listener, um, connectionConfig);
2627
ftpServer.start();
2728
if (ftpServerProperties.isWebEnable()) {
2829
WebServer webServer = new WebServer(ftpServerProperties, ftpServer);

src/main/java/top/meethigher/ftp/server/config/FTPServerProperties.java

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,36 @@ public class FTPServerProperties {
5959
*/
6060
private boolean webEnable = true;
6161

62+
/**
63+
* 最大登录数
64+
*/
65+
private int maxLogins = 10;
66+
67+
/**
68+
* 启用匿名登录
69+
*/
70+
private boolean anonymousLoginEnabled = true;
71+
72+
/**
73+
* 最大匿名登录数
74+
*/
75+
private int maxAnonymousLogins = 10;
76+
77+
/**
78+
* 最大登录失败数
79+
*/
80+
private int maxLoginFailures = 3;
81+
82+
/**
83+
* 登录失败延迟
84+
*/
85+
private int loginFailureDelay = 500;
86+
87+
/**
88+
* 最大线程
89+
*/
90+
private int maxThreads = 0;
91+
6292

6393
public int getPort() {
6494
return port;
@@ -123,4 +153,52 @@ public boolean isWebEnable() {
123153
public void setWebEnable(boolean webEnable) {
124154
this.webEnable = webEnable;
125155
}
156+
157+
public int getMaxLogins() {
158+
return maxLogins;
159+
}
160+
161+
public void setMaxLogins(int maxLogins) {
162+
this.maxLogins = maxLogins;
163+
}
164+
165+
public boolean isAnonymousLoginEnabled() {
166+
return anonymousLoginEnabled;
167+
}
168+
169+
public void setAnonymousLoginEnabled(boolean anonymousLoginEnabled) {
170+
this.anonymousLoginEnabled = anonymousLoginEnabled;
171+
}
172+
173+
public int getMaxAnonymousLogins() {
174+
return maxAnonymousLogins;
175+
}
176+
177+
public void setMaxAnonymousLogins(int maxAnonymousLogins) {
178+
this.maxAnonymousLogins = maxAnonymousLogins;
179+
}
180+
181+
public int getMaxLoginFailures() {
182+
return maxLoginFailures;
183+
}
184+
185+
public void setMaxLoginFailures(int maxLoginFailures) {
186+
this.maxLoginFailures = maxLoginFailures;
187+
}
188+
189+
public int getLoginFailureDelay() {
190+
return loginFailureDelay;
191+
}
192+
193+
public void setLoginFailureDelay(int loginFailureDelay) {
194+
this.loginFailureDelay = loginFailureDelay;
195+
}
196+
197+
public int getMaxThreads() {
198+
return maxThreads;
199+
}
200+
201+
public void setMaxThreads(int maxThreads) {
202+
this.maxThreads = maxThreads;
203+
}
126204
}

src/main/java/top/meethigher/ftp/server/utils/FTPServerUtils.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package top.meethigher.ftp.server.utils;
22

3+
import org.apache.ftpserver.ConnectionConfig;
34
import org.apache.ftpserver.DataConnectionConfigurationFactory;
45
import org.apache.ftpserver.FtpServer;
56
import org.apache.ftpserver.FtpServerFactory;
67
import org.apache.ftpserver.ftplet.Authority;
78
import org.apache.ftpserver.ftplet.UserManager;
9+
import org.apache.ftpserver.impl.DefaultConnectionConfig;
10+
import org.apache.ftpserver.impl.DefaultDataConnectionConfiguration;
811
import org.apache.ftpserver.listener.Listener;
912
import org.apache.ftpserver.usermanager.impl.BaseUser;
1013
import org.apache.ftpserver.usermanager.impl.ConcurrentLoginPermission;
@@ -105,6 +108,12 @@ public static FTPServerProperties ftpServerProperties() {
105108
p.setIdleSeconds(properties.getInteger("idleSeconds", p.getIdleSeconds()));
106109
p.setActiveLocalPort(properties.getInteger("activeLocalPort", p.getActiveLocalPort()));
107110
p.setPassivePorts(properties.getString("passivePorts", p.getPassivePorts()));
111+
p.setAnonymousLoginEnabled(properties.getBoolean("anonymousLoginEnabled", p.isAnonymousLoginEnabled()));
112+
p.setLoginFailureDelay(properties.getInteger("loginFailureDelay", p.getLoginFailureDelay()));
113+
p.setMaxLogins(properties.getInteger("maxLogins", p.getMaxLogins()));
114+
p.setMaxAnonymousLogins(properties.getInteger("maxAnonymousLogins", p.getMaxAnonymousLogins()));
115+
p.setMaxLoginFailures(properties.getInteger("maxLoginFailures", p.getMaxLoginFailures()));
116+
p.setMaxThreads(properties.getInteger("maxThreads", p.getMaxThreads()));
108117
p.setWebPort(properties.getInteger("web.port", p.getWebPort()));
109118
p.setWebUsername(properties.getString("web.username", p.getWebUsername()));
110119
p.setWebPassword(properties.getString("web.password", p.getWebPassword()));
@@ -180,6 +189,11 @@ public static Listener listener(FTPServerProperties p) {
180189
return listenerFactory.createListener();
181190
}
182191

192+
public static ConnectionConfig connectionConfig(FTPServerProperties p) {
193+
return new DefaultConnectionConfig(p.isAnonymousLoginEnabled(), p.getLoginFailureDelay(),
194+
p.getMaxLogins(), p.getMaxAnonymousLogins(), p.getMaxLoginFailures(), p.getMaxThreads());
195+
}
196+
183197
public static UserManager userManager(List<BaseUser> list) {
184198
MemoryPropertiesUserManagerFactory propertiesUserManagerFactory = new MemoryPropertiesUserManagerFactory();
185199
UserManager um = propertiesUserManagerFactory.createUserManager();
@@ -193,8 +207,10 @@ public static UserManager userManager(List<BaseUser> list) {
193207
}
194208

195209
public static AuditFtpServer ftpServer(Listener listener,
196-
UserManager userManager) {
210+
UserManager userManager, ConnectionConfig connectionConfig) {
197211
AuditFtpServerFactory serverFactory = new AuditFtpServerFactory();
212+
// 配置连接限制
213+
serverFactory.setConnectionConfig(connectionConfig);
198214
//请不要移除default
199215
serverFactory.addListener("default", listener);
200216
serverFactory.setUserManager(userManager);

src/main/resources/logback.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
55
<Target>System.out</Target>
66
<encoder>
7-
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern>
7+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] : %msg%n%ex{5}</pattern>
88
<charset>utf-8</charset>
99
</encoder>
1010
</appender>
@@ -19,7 +19,7 @@
1919
</rollingPolicy>
2020
<append>true</append>
2121
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
22-
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern>
22+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] : %msg%n%ex{5}</pattern>
2323
<charset>utf-8</charset>
2424
</encoder>
2525
</appender>

users/ftpadmin.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ password=ftpadmin
44
maxUploadRate=1024000
55
name=ftpadmin
66
maxDownloadRate=1024000
7-
maxConcurrentLoginsPerIP=1
7+
maxConcurrentLoginsPerIP=1000
88
write=/ccc-test
9-
maxConcurrentLogins=5
9+
maxConcurrentLogins=5000
1010
enabled=true
11-
homeDir=C\:/Users/meethigher/Desktop
11+
homeDir=D:/Desktop/ftpadmin

0 commit comments

Comments
 (0)