Có cách nào tôi có thể thực hiện một FTP an toàn với org.apache.commons.net.ftp.FTPClient
?Secure FTP với org.apache.commons.net.ftp.FTPClient
Nếu không, tùy chọn khác cho Java là gì?
Có cách nào tôi có thể thực hiện một FTP an toàn với org.apache.commons.net.ftp.FTPClient
?Secure FTP với org.apache.commons.net.ftp.FTPClient
Nếu không, tùy chọn khác cho Java là gì?
Bạn có thể sử dụng org.apache.commons.net.ftp. FTPSClient thay vì org.apache.commons.net.ftp. FTPClient có ftp an toàn http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html
sao bạn không thử Apache Camel,
Apache FTPClient không hỗ trợ SFTP vào lúc này. Tuy nhiên, bạn có thể sử dụng JSch - Java Secure Channel.
Onkar Joshi đi vào chi tiết của thư viện để sử dụng cho FTP, SFTP, FTPS chuyển tập tin trong Java.
Một ví dụ của việc sử dụng JSch để chuyển các tập tin với SFTP là như sau:
...
private static final Logger logger = Logger.getLogger(YourClass.class.getName());
public boolean sendDataViaSFTP(String contents) throws Exception {
String hostname = "<FTP hostname/IP>";
String username = "<FTP username>";
String password = "<FTP password>";
String remoteDirectory = "<FTP remote directory>";
int ftpPort = 22;
logger.info("*** Creating FTP session. ***");
JSch jsch = new JSch();
Session session = null;
Channel channel = null;
ChannelSftp c = null;
//Now connect and SFTP to the SFTP Server
try {
//Create a session sending through our username and password
session = jsch.getSession(username, hostname, ftpPort);
logger.info("*** FTP Session created. ***");
session.setPassword(password);
//Security.addProvider(new com.sun.crypto.provider.SunJCE());
//Setup Strict HostKeyChecking to no so we dont get the
//unknown host key exception
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
logger.info("*** Session connected. ***");
//Open the SFTP channel
logger.info("*** Opening FTP Channel. ***");
channel = session.openChannel("sftp");
channel.connect();
c = (ChannelSftp) channel;
//Change to the remote directory
logger.info("*** Changing to FTP remote dir: " + remoteDirectory + " ***");
c.cd(remoteDirectory);
//Send the file we generated
try {
String filename = "myfile.txt";
logger.info("*** Storing file as remote filename: " + filename + " ***");
ByteArrayInputStream bis = new ByteArrayInputStream(contents.getBytes());
c.put(bis, filename);
return true;
} catch (Exception e) {
logger.info("*** Storing remote file failed. " + e.toString() + " ***");
throw e;
}
} catch (Exception e) {
logger.info("*** Unable to connect to FTP server. " + e.toString() + " ***");
throw e;
} finally {
//
//Disconnect from the FTP server
//
try {
if(session != null)
session.disconnect();
if(channel != null)
channel.disconnect();
if(c != null)
c.quit();
} catch (Exception exc) {
logger.severe("*** Unable to disconnect from FTP server. " + exc.toString()+" ***");
}
logger.info("*** SFTP Process Complete. ***");
}
}
...
Trước tiên, hãy chắc chắn rằng bạn hiểu sự khác biệt giữa FTPS (Secure FTP) và SFTP:
FTPS versus SFTP versus SCP
Nếu bạn cần FTPS (Secure FTP), bạn có thể sử dụng FTPSClient
thay vì FTPClient
từ Apache Commons thư viện:
https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html
Nếu bạn cần SFTP, xem:
01.233.
Java SFTP Transfer Library
Bạn đã tìm thấy gì? – Rob
Có lý do nào khiến bạn không thể SSH? Nếu không có, hãy thử Apache Mina hoặc Jsch – amphibient
gì về việc chuyển nó cho 'FTPSClient' rằng lớp con nó? –