SFTP Default Session Factory или SFTP Простое соединение для загрузки файла на несколько удаленных серверов - PullRequest
0 голосов
/ 28 августа 2018

У меня есть несколько удаленных серверов, настроенных в нашем приложении в зависимости от клиентов.

Когда отчет готов для этого конкретного клиента, я должен подключиться к удаленному серверу этого конкретного клиента и загрузить файл отчета.

Передо мной два варианта а) использование фабрики сессий Spring по умолчанию (получение фабрики сессий для каждой загрузки файла)

    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
        factory.setHost(sftpHost);
        factory.setPort(sftpPort);
        factory.setUser(sftpUser);
        if (sftpPrivateKey != null) {
            factory.setPrivateKey(sftpPrivateKey);
            factory.setPrivateKeyPassphrase(sftpPrivateKeyPassphrase);
        } else {
            factory.setPassword(sftpPasword);
        }
        factory.setAllowUnknownKeys(true);
        return factory;
    }

    @Bean
    @ServiceActivator(inputChannel = "toSftpChannel")
    public MessageHandler handler() {
        SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
        handler.setRemoteDirectoryExpression(new LiteralExpression(sftpRemoteDirectory));
        handler.setFileNameGenerator(new FileNameGenerator() {
            @Override
            public String generateFileName(Message<?> message) {
                if (message.getPayload() instanceof File) {
                    return ((File) message.getPayload()).getName();
                } else {
                    throw new IllegalArgumentException("File expected as payload.");
                }
            }
        });
        return handler;
    }

б) используя простое соединение sftp

 try {
        JSch jsch = new JSch();
        Session session = jsch.getSession("sftpuser", "sftphost");
        session.setPassword("sftppassword");
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        config.put("PreferredAuthentications",
                "publickey,keyboard-interactive,password");

        session.setConfig(config);
        session.connect();
        Channel channel = session.openChannel("sftp");
        channel.connect();
        System.out.println("sftp channel opened and connected.");
        ChannelSftp channelSftp = (ChannelSftp) channel;

какой из них больше подходит в этом случае?

1 Ответ

0 голосов
/ 26 октября 2018

Второй вариант используется в основе первого варианта. Так что в вашем случае, если вы используете пружинный каркас, то используйте первый вариант. Если вы не используете пружину, используйте второй вариант.

В Spring есть инструменты, которые вы можете использовать в своем случае.

...