一、现象描述
通过ftp客户端代码登录ftp服务器向指定目录发布文件,发生FTPException异常,消息提示“Maximum login limit has been reached”,详情如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
_, ftpserver0_.CREATE_TIME as CREATE8_12_0_, ftpserver0_.UPDATE_TIME as UPDATE9_
12_0_, ftpserver0_.STATUS as STATUS12_0_, ftpserver0_.VIRTUAL_DIR as VIRTUAL11_1
2_0_ from FTPSERVER ftpserver0_ where ftpserver0_.ID=?
[INFO ][
2015
-
12
-
20
21
:
56
:
26
][com.xwood.pms.core.ftp.IssFTPClient.login(IssFTPClien
t.java:
74
)]:建立连接
it.sauronsoftware.ftp4j.FTPException [code=
421
, message= Maximum login limit has
been reached.]
at it.sauronsoftware.ftp4j.FTPClient.login(FTPClient.java:
1242
)
at it.sauronsoftware.ftp4j.FTPClient.login(FTPClient.java:
1168
)
at com.xwood.pms.core.ftp.IssFTPClient.login(IssFTPClient.java:
82
)
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
171
)
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
144
)
at com.xwood.pms.service.impl.FilePublisher.createAndPublishWithMultiPorta
ls(FilePublisher.java:
306
)
at com.xwood.pms.util.publisher.PublishRunnable.call(PublishRunnable.java:
59
)
at com.xwood.pms.util.publisher.PublishRunnable.call(PublishRunnable.java:
1
)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
[INFO ][
2015
-
12
-
20
21
:
56
:
26
][com.xwood.pms.core.ftp.IssFTPClient.login(IssFTPClien
t.java:
87
)]:登录FTP服务器失败!Maximum login limit has been reached.
java.lang.IllegalStateException: Client not authenticated
at it.sauronsoftware.ftp4j.FTPClient.changeDirectory(FTPClient.java:
1610
)
at com.xwood.pms.core.ftp.IssFTPClient.changeDirectory(IssFTPClient.java:
2
04
)
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
172
)
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
144
)
at com.xwood.pms.service.impl.FilePublisher.createAndPublishWithMultiPorta
ls(FilePublisher.java:
306
)
at com.xwood.pms.util.publisher.PublishRunnable.call(PublishRunnable.java:
59
)
at com.xwood.pms.util.publisher.PublishRunnable.call(PublishRunnable.java:
1
)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
com.xwood.pms.core.freemarker.exception.FtpException: ftp异常!file:/_site_domain_
/_root/
5870
/
5930
/
5931
/
6189
/
6515
//E:/SaaServices/tomcat6-exe/webapps/ROOT/_root/5
870
/
5930
/
5931
/
6189
/
6515
/index.htmlClient not authenticated
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
188
)
at com.xwood.pms.util.publisher.FtpOms.upload(FtpOms.java:
144
)
at com.xwood.pms.service.impl.FilePublisher.createAndPublishWithMultiPorta
ls(FilePublisher.java:
306
)
|
二、解决步骤
1. 从FTPException异常消息很明显,是因ftp客户端登陆数超上限造成的,所以需将ftp服务器的登录数限制配置参数调大
2. 这边是用的 apache-ftpserver-1.0.6 (如是其他服务器如vsftpd、ServU请修改其配置),启动命令是通过ftpd-typical.xml的xml配置参数进行初始化ftpserver对象
3. 通过ftp默认启动,定位根目录common -> lib -> f tpserver-core-1.0.6.jar包文件
4. 通过源码查找最大登录数相关配置文件及属性(max-logins最大登录数),找到如下图所示
5. 找到ftpd-typical.xml初始化配置文件,配置了如下箭头所示属性(max-logins="999999")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
server
xmlns
=
"http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd
"
id
=
"myServer"
max-logins
=
"999999"
max-threads
=
"9999"
>
<
listeners
>
<
nio-listener
name
=
"default"
port
=
"21"
>
<
ssl
>
<
keystore
file
=
"./res/ftpserver.jks"
password
=
"password"
/>
</
ssl
>
</
nio-listener
>
</
listeners
>
<
file-user-manager
file
=
"./res/conf/users.properties"
encrypt-passwords = "clear" />
</
server
>
|
6. 重启服务,一切正常