Я настроил VSFTPD в докеризованном контейнере на основе образа Alpine. У него есть пользователь spring
с паролем Password!
.
FROM alpine
# Manners.
RUN echo Hello From Alpine!
#Install VSFTPD and copy config from host to build.
RUN apk add vsftpd
COPY vsftpd.conf /etc/vsftpd.conf
# Includes a fix of a Race Condition => Add a 1s sleep to allow new
# daemon vsftpd to fully initialise before script continuation.
COPY vsftpd /etc/init.d/vsftpd
#Create a Spring User with the best password ever:
RUN adduser -D --shell /bin/ash spring
#Create password
RUN echo spring:Password! | chpasswd
RUN echo Created Spring User.
RUN mkdir /home/spring/empty
#Start VSFTPD
CMD echo hello! && cd /usr/sbin && ./vsftpd /etc/vsftpd.conf
При подключении с Filezilla в качестве пользователя spring
я могу перемещать файлы и т.д. c. без проблем.
При использовании SpringDefaultSessionFactory в Spring я вижу соединение, возникающее в wireshark, но последующие команды, похоже, не работают.
Например, попытка загрузить файл из classpath дает java.net.ConnectException: Connection refused (Connection refused)
Мой код:
@Bean
public DefaultFtpSessionFactory defaultFtpSessionFactory() {
DefaultFtpSessionFactory defaultFtpSessionFactory = new DefaultFtpSessionFactory();
defaultFtpSessionFactory.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE);
defaultFtpSessionFactory.setHost("127.0.0.1");
defaultFtpSessionFactory.setPassword("Password!");
defaultFtpSessionFactory.setUsername("spring");
defaultFtpSessionFactory.setBufferSize(1000000);
defaultFtpSessionFactory.setPort(21);
defaultFtpSessionFactory.setFileType(FTPClient.BINARY_FILE_TYPE);
return defaultFtpSessionFactory;
}
@Service
public class FTPService {
@Autowired
private DefaultFtpSessionFactory defaultFtpSessionFactory;
@PostConstruct
public void doConnect() throws IOException {
FtpSession session = defaultFtpSessionFactory.getSession();
session.getClientInstance().enterLocalPassiveMode();
System.out.println("session.isOpen() = " + session.isOpen());
boolean test = session.test();
System.out.println("test = " + test);
FTPFile[] list = session.list("/");
}
}
Я не могу понять, почему это так, когда я вижу соединение и команды, возникающие и получающие ответы через wireshark ... Любая помощь будет признательна или указатель в правильном направлении.