我想弄清楚如何實現基於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我根據您的評論更新了我的答案並提供了更多詳細信息。 –