当前位置: 首页 > 知识库问答 >
问题:

用于传入文件的Apache Mina SFTP服务器端通道侦听器

东门修文
2023-03-14

我试图找出如何为基于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();
}

该服务器能够接收文件并将其存储在虚拟文件系统中。我可以读取文件/验证内容,但只有在文件被接收和存储后。目前基本的身份验证已经很好了,值得庆幸的是,身份验证机制已经有了很好的文档记录!

所以我的问题是:

    null
    null

提前感谢!利。

共有1个答案

薛弘济
2023-03-14

您似乎有一个想法,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 拜托,你知道怎么解决这个问题吗?