Spring FTPSession подключается, но при выдаче команды - соединение отклонено - PullRequest
0 голосов
/ 12 апреля 2020

Я настроил 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, но последующие команды, похоже, не работают.

Wirehsark Output

Например, попытка загрузить файл из 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 ... Любая помощь будет признательна или указатель в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...