Lei*_*fin 1 java sftp listener mina
我试图弄清楚如何为基于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)
该服务器能够接收文件并将其存储在虚拟文件系统上。我只能在收到并存储文件后才能读取文件/验证内容。目前基本身份验证还不错,感谢您对身份验证机制的详细记录!
所以我的问题是:
要么
提前致谢!eigh
您似乎有一个想法,即SFTP与HTTP相似。也就是说,客户端使用“写”请求(例如HTTP PUT)打开连接,发送请求正文的文件内容,然后断开连接。
这不是SFTP的工作方式。
SFTP就像一个远程文件系统。客户端连接到SSH / SFTP服务器,并使连接保持打开状态。在会话期间,客户端发送“打开”文件请求(具有读或写或同时具有两个特权),并获得打开文件的句柄。然后,它使用文件句柄发送一系列读/写块请求。最后,它关闭了手柄。在单个会话中,客户端可以(并且通常可以)读取/写入或读取/写入任意数量的文件。它甚至可以并行打开多个文件,以完全随机的顺序访问它们。它与应用程序与本地文件系统一起使用的方式非常相似。
含义:
当您不喜欢文件时,无法拒绝连接,因为连接请求本身未与特定文件关联。您所能做的就是拒绝文件“打开”(或“创建”)请求。
拦截文件打开/创建请求的一种方法:
NativeFileSystemView。NativeSshFile。NativeFileSystemView.createNativeSshFile创建您的NativeSshFileNativeFileSystemView.isWritable()您不能重定向SFTP连接。SSH / SFTP不支持“重定向”连接(不同于HTTP)
没有一个时刻可以一次将一个完整的文件存储在内存中,因此您可以通过某种方式对其进行检查。客户端改为分块发送文件。当然,您可以通过以下方式重新实现MINA SFTP“输入流”:将文件内容保存在内存中,并在收到“关闭”请求后检查完整内容;仅在对文件满意后才将文件保存到磁盘。但是要注意DOS攻击。