У меня есть несколько удаленных серверов, настроенных в нашем приложении в зависимости от клиентов.
Когда отчет готов для этого конкретного клиента, я должен подключиться к удаленному серверу этого конкретного клиента и загрузить файл отчета.
Передо мной два варианта
а) использование фабрики сессий 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;
какой из них больше подходит в этом случае?