我想弄清楚如何实现基于Java的SFTP服务器的服务器端侦听器,以提醒我传入的文件传输。我正在使用最新版本的Apache Mina。我的场景是我的服务器只需从客户端接收文件并在存储文件之前对文件执行“某些操作”。这可能是错误检查/规则验证/转发其他地方的内容。事情是我想在它保存在我的系统之前这样做。我对文档有困难,无法找到一个工作示例,它显示了一个可以访问传入文件流的侦听器。我已经从导向截取的非常简单的服务器:Apache Mina SFTP服务器端通道侦听器传入文件
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();
}
该服务器能够接收文件并存储它的虚拟文件系统上的。我可以读取文件/验证内容,但只能在收到并存储文件之后。基本认证现在很好,认证机制真的很好地记录在案!
所以我的问题是:
- 是否有检查时动态连接正在取得/时的内容被转移并拦截,因为它是即发生之前,该文件实际上是犯了一个手段到一个目录。
或
- 我需要设置一个听众,他们似乎根本看新的文件的目录并进行处理相应的?
在此先感谢! Leigh。
嘿,谢谢你的回复,我想拦截文件,然后“登陆”服务器,因为我想要路由它。我要求尽可能无盘,并且不要将文件存储在此SFTP服务器上(出于安全考虑)。如果我正在尝试的是不可能的,那么这是可以改变的,只是临时存储它,直到听众捡起它。理想情况下,我想拦截请求,因为它正在进入,并根据例如发件人安全组来适当地进行过滤......这可能意味着打开一个新连接以将其传递到另一台服务器或拒绝请求。 –
感谢您的详细信息。你能把它们纳入你的问题吗?使用该帖子下方的“修改”链接。 –
@LeighGriffin我根据您的评论更新了我的答案并提供了更多详细信息。 –