目前我正在研究SFTP协议.我使用Apache Mina Sshd库创建了SFTP客户端使用Jsch库和SFTP服务器.我已经建立了它们之间的连接,并且可以成功地将文件发送到SFTP服务器.现在我正在创建一个SFTP服务器处理传入文件的辅助文件处理程序.举个例子,假设SFTP服务器可以从SFTP客户端接收文件,但是当前在我的实现中,当文件到达服务器时没有办法通知.我只是去服务器根文件夹,看看是否有是一个可用的文件.这就是我知道文件是否到达的方式.
我想实现当文件到达服务器时它将通知用户文件到达和文件内容.(文件名和其他详细信息).但问题是我是Apache Mina的新手sshd API.i已经通过文档但我无法弄明白.
请问我是否知道如果在Apache Mina Sshd服务器中有任何已经实现的侦听器来处理传入文件,或者如果没有,我如何为传入文件实现我自己的侦听器.
SFTP服务器代码
public class SftpServerStarter {
private SshServer sshd;
private final static Logger logger = LoggerFactory.getLogger(SftpServerStarter.class);
public void start(){
sshd = SshServer.setUpDefaultServer();
sshd.setPort(22);
sshd.setHost("localhost");
sshd.setPasswordAuthenticator(new MyPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new MyPublickeyAuthenticator());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setFileSystemFactory(new VirtualFileSystemFactory("C:/root"));
try {
logger.info("Starting ...");
sshd.start();
logger.info("Started");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info("Can not Start Server");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Apache Mine SSHD v1.2.0设置一个简单的SFTP服务器.
然而它们都具有共同的同一行,我不能让NetBeans中解决.NetBeans的告诉我,它无法找到Factory在SftpSubsystem.有问题的行看起来如下:
sftpServer.setSubsystemFactories (
Arrays. <NamedFactory <Command >> asList (new SftpSubsystem.Factory ()));
Run Code Online (Sandbox Code Playgroud)
我的main外表如下:
SshServer sftpServer = SshServer.setUpDefaultServer ();
sftpServer.setPort (PORT);
sftpServer.setKeyPairProvider (new SimpleGeneratorHostKeyProvider (new File("hostkey.ser")));
sftpServer.setSubsystemFactories (
Arrays. <NamedFactory <Command >> asList (new SftpSubsystem.Factory ()));
sftpServer.setPasswordAuthenticator (new PasswordAuthenticator () {
@Override
public boolean authenticate (String username, String password, ServerSession session) {
return true;
}
});
sftpServer.start ();
while(true);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我只想连接到虚拟SFTP服务器并列出一些目录并上传一两个文件.问题是我想从现有的Java应用程序中执行此操作.
提前致谢.