Мне нужно обновить старое программное обеспечение для обмена файлами, которое использует JCIFS для Windows Server 2012. В целях безопасности мы должны отключить совместимость с SMB 1.0/CIFS. Кто-нибудь знает обходной путь, исправление или альтернативу JCIFS, которую можно использовать в Java?
Общий файловый ресурс Java SMB без включенной совместимости с SMB 1.0/CIFS
Ответы (2)
Я только что опубликовал ответ на аналогичный вопрос:
Доступ к общему ресурсу SMB2.1 или SMB3 из java?
‹...> Я только что использовал hierynomus/smbj v0.2.0 на Android и добавил поддержку SMB2 . ‹...> Нужен был Bouncycastle/Spongycastle ‹...>
Загрузка файла
Убедитесь, что вы установили правильные флаги при вызове openFile
на DiskShare
(конечно, просмотрев исходный код):
// required imports
import com.hierynomus.msdtyp.AccessMask;
import com.hierynomus.msfscc.FileAttributes;
import com.hierynomus.mssmb2.SMB2CreateDisposition;
import com.hierynomus.mssmb2.SMB2CreateOptions;
import com.hierynomus.mssmb2.SMB2ShareAccess;
import com.hierynomus.smbj.SMBClient;
import com.hierynomus.smbj.SmbConfig;
import com.hierynomus.smbj.auth.AuthenticationContext;
import com.hierynomus.smbj.common.SMBApiException;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;
import com.hierynomus.smbj.share.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashSet;
...
// connection params
String sambaDomain = null; // can be null
String sambaUsername = "iamuploader";
String sambaPass = "mysecret";
String sambaIP = "192.168.1.236";
String sambaSharedPath = "sharedfolder";
...
// upload method
// usage: upload("file/whithin/folder.txt", fileBytes);
public void upload(String filename, byte[] bytes) throws IOException {
SmbConfig cfg = SmbConfig.builder().build();
SMBClient client = new SMBClient(cfg);
Connection connection = client.connect(sambaIP);
Session session = connection.authenticate(new AuthenticationContext(sambaUsername, sambaPass.toCharArray(), sambaDomain));
DiskShare share = (DiskShare) session.connectShare(sambaSharedPath);
// this is com.hierynomus.smbj.share.File !
File f = null;
int idx = filename.lastIndexOf("/");
// if file is in folder(s), create them first
if(idx > -1) {
String folder = filename.substring(0, idx);
try {
if(!share.folderExists(folder)) share.mkdir(folder);
} catch (SMBApiException ex) {
throw new IOException(ex);
}
}
// I am creating file with flag FILE_CREATE, which will throw if file exists already
if(!share.fileExists(filename)){
f = share.openFile(filename,
new HashSet<>(Arrays.asList(AccessMask.GENERIC_ALL)),
new HashSet<>(Arrays.asList(FileAttributes.FILE_ATTRIBUTE_NORMAL)),
SMB2ShareAccess.ALL,
SMB2CreateDisposition.FILE_CREATE,
new HashSet<>(Arrays.asList(SMB2CreateOptions.FILE_DIRECTORY_FILE))
);
}
if(f == null) return null;
OutputStream os = f.getOutputStream();
os.write(bytes);
os.close();
}
person
Aivaras
schedule
12.07.2017
Спасибо за ответ, я сопровождаю SMBJ.
- person Hiery Nomus; 17.07.2017
Visuality Systems разрабатывает коммерческий стек smb на Java с обратной поддержкой SMB1. Бета-версия будет доступна в ближайшее время. VS также предоставляет полный SMB через JNI поверх существующего стека NQE.
person
Mark Rabinovich
schedule
20.06.2017
Спасибо за информацию. Я посмотрю на них.
- person WilliamA; 21.06.2017