目前我正在研究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) 我试图弄清楚如何为基于Java的SFTP服务器实现服务器端侦听器,以提醒我有传入的文件传输。我正在使用最新版本的Apache Mina。我的情况是服务器只从客户端接收文件,然后在存储文件之前对文件进行“处理”。那可能是错误检查/规则验证/将内容转发到其他地方。我要做的是先将其保存在系统中。我在使用文档时遇到困难,找不到一个工作示例,该示例显示了通过访问传入文件流而实现的侦听器。我从指南中获得了一个非常简单的服务器:
public void setupServer() throws IOException {
sshd = SshServer.setUpDefaultServer();
sshd.setFileSystemFactory(new NativeFileSystemFactory() {
@Override
public FileSystemView createFileSystemView(final Session session) {
return new NativeFileSystemView(session.getUsername(), false) {
@Override
public String getVirtualUserDir() {
return testFolder.getRoot().getAbsolutePath();
}
};
};
});
sshd.setPort(8001);
sshd.setSubsystemFactories(Arrays
.<NamedFactory<Command>> asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(testFolder
.newFile("hostkey.ser").getAbsolutePath()));
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
public boolean authenticate(final String username, final String password,
final ServerSession session) {
return StringUtils.equals(username, USERNAME)
&& StringUtils.equals(password, PASSWORD);
}
});
// SessionListener event = new SessionListener();
sshd.start();
}
Run Code Online (Sandbox Code Playgroud)
该服务器能够接收文件并将其存储在虚拟文件系统上。我只能在收到并存储文件后才能读取文件/验证内容。目前基本身份验证还不错,感谢您对身份验证机制的详细记录!
所以我的问题是: …