我试图找出如何为基于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();
}
该服务器能够接收文件并将其存储在虚拟文件系统中。我可以读取文件/验证内容,但只有在文件被接收和存储后。目前基本的身份验证已经很好了,值得庆幸的是,身份验证机制已经有了很好的文档记录!
所以我的问题是:
提前感谢!利。
您似乎有一个想法,SFTP是类似于HTTP的协议。即。客户端打开一个带有“写”请求的连接(如HTTP PUT),发送一个请求正文的文件内容,断开连接,仅此而已。
SFTP不是这样工作的。
SFTP就像一个远程文件系统。客户端连接到SSH/SFTP服务器并保持连接打开。在会话期间,客户机发送一个“打开”文件请求(具有读或写或两者的权限),并获得打开的文件的句柄。然后,它使用文件句柄发送一系列读/写块请求。最后它关闭句柄。在单个会话期间,客户机可以(通常也可以)读/写任何数量的文件,或者同时读/写任何数量的文件。它甚至可以并行打开几个文件,以完全随机的顺序访问它们。这与应用程序使用本地文件系统的方式非常相似。
截获文件打开/创建请求的一种方法:
NativeFilesystemView
.nativesshfile
.nativeFilesystemview.createNativesshFile
创建nativesshFile
nativeFilesystemview.iswritable()
不能重定向SFTP连接。SSH/SFTP不支持连接“重定向”(与HTTP不同)
要运行Kafka,需要在文件。有两种设置我不理解。 有人可以解释侦听器和广告侦听器属性之间的区别吗? 留档说: 侦听器:套接字服务器侦听的地址。 和 advertised.listeners:主机名和端口代理将向生产者和消费者做广告。 我什么时候必须使用哪个设置?
我有一个正在Eureka服务器上注册的服务“a”,我希望Eureka服务器在每次在Eureka内注册新服务时通知该服务。有什么办法吗?
我有一个监听两个不同端口的TCP服务器。我创建了两个不同的套接字,一个在端口8888上,一个在端口6634上。我监听这些端口,然后我在FD_SET中添加两个套接字,并将它们传递给Select()函数...当套接字准备好读取时,我检查FD_ISSET,看看哪个端口上有消息要读取。 不管怎样,当我连接到8888端口时,构思是成功的,我可以向服务器发送和接收。。。当我在客户端ctrl c时,选择函数再次
我正在开发一个基于通知的应用程序,为此我需要监听传入的通知。我已经能够监听来电、短信、邮件等。我不知道如何通过代码监听Whatsapp上朋友的ping或消息。这实际上能做到吗?如果是,怎么做?可访问性服务是否可以用于此,使用包名为“com.whatsapp”?
如果我想在服务器端使用Firebase,而不是使用快速和node.js的REST路由,我将如何处理缩放和负载平衡?例如,如果我有一个在服务器端使用Firebase的快速应用程序,那么每个旋转的服务器都会包含这些侦听器并对它们做出反应吗?在考虑到弹性负载平衡的情况下,在服务器端使用Firebase是否有可扩展的解决方案?
在终端上,我得到了这个错误:$./asadmin start-domain domain1 找不到默认的域目录。此系统属性没有值:com.sun.aas.domainsroot命令启动-域失败。 在Eclipse上,我得到了这个运行时异常:在Felix平台上启动GlassFish 玻璃鱼4 拜托,你知道怎么解决这个问题吗?