Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未启用SMB 1.0/CIFS兼容性的Java SMB文件共享_Java_Smb_Jcifs - Fatal编程技术网

未启用SMB 1.0/CIFS兼容性的Java SMB文件共享

未启用SMB 1.0/CIFS兼容性的Java SMB文件共享,java,smb,jcifs,Java,Smb,Jcifs,我必须更新一个使用JCIFS for Windows Server 2012的旧文件共享软件。出于安全目的,我们必须禁用SMB 1.0/CIFS兼容性。有人知道可以在Java中使用的JCIFS的解决方案、修复方案或替代方案吗?Visuality Systems正在Java中开发一个商业smb堆栈,并向后支持SMB1。测试版将很快推出。VS还通过JNI在其现有NQE堆栈上提供完整的SMB Visuality Systems正在用Java开发一个商业smb堆栈,并向后支持SMB1。测试版将很快推出。

我必须更新一个使用JCIFS for Windows Server 2012的旧文件共享软件。出于安全目的,我们必须禁用SMB 1.0/CIFS兼容性。有人知道可以在Java中使用的JCIFS的解决方案、修复方案或替代方案吗?

Visuality Systems正在Java中开发一个商业smb堆栈,并向后支持SMB1。测试版将很快推出。VS还通过JNI在其现有NQE堆栈上提供完整的SMB

Visuality Systems正在用Java开发一个商业smb堆栈,并向后支持SMB1。测试版将很快推出。VS还通过JNI在其现有NQE堆栈上提供完整的SMB

我刚刚发布了一个类似问题的答案:

我刚刚在Android上使用,并添加了SMB2支持。 需要一个弹跳城堡/海绵城堡

上传文件 在
DiskShare
上调用
openFile
时,确保设置了正确的标志(通过查看源代码):

//所需的导入
导入com.hierynomus.msdtyp.AccessMask;
导入com.hierynomus.msfscc.FileAttributes;
导入com.hierynomus.mssmb2.SMB2CreateDisposition;
导入com.hierynomus.mssmb2.SMB2CreateOptions;
导入com.hierynomus.mssmb2.SMB2ShareAccess;
导入com.hierynomus.smbj.SMBClient;
导入com.hierynomus.smbj.SmbConfig;
导入com.hierynomus.smbj.auth.AuthenticationContext;
导入com.hierynomus.smbj.common.SMBApiException;
导入com.hierynomus.smbj.connection.connection;
导入com.hierynomus.smbj.session.session;
导入com.hierynomus.smbj.share.DiskShare;
导入com.hierynomus.smbj.share.File;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.array;
导入java.util.HashSet;
...
//连接参数
字符串sambaDomain=null;//可以为空
字符串sambaUsername=“iamuploader”;
字符串sambapas=“mysecret”;
字符串sambaIP=“192.168.1.236”;
字符串sambaSharedPath=“sharedfolder”;
...
//上传方式
//用法:上传(“file/whithin/folder.txt”,fileBytes);
公共无效上载(字符串文件名,字节[]字节)引发IOException{
SmbConfig cfg=SmbConfig.builder().build();
SMBClient=新的SMBClient(cfg);
连接=client.connect(sambaIP);
Session Session=connection.authenticate(新的AuthenticationContext(sambaUsername,sambaPass.ToCharray(),sambaDomain));
DiskShare=(DiskShare)session.connectShare(sambaSharedPath);
//这是com.hierynomus.smbj.share.File!
文件f=null;
int idx=filename.lastIndexOf(“/”);
//如果文件位于文件夹中,请先创建它们
如果(idx>-1){
String folder=filename.substring(0,idx);
试一试{
如果(!share.folderExists(folder))share.mkdir(folder);
}捕获(SMBApiException ex){
抛出新的IOException(ex);
}
}
//我正在创建带有标志file_CREATE的文件,如果文件已经存在,它将抛出
如果(!share.fileExists(filename)){
f=share.openFile(文件名,
新的HashSet(Arrays.asList(AccessMask.GENERIC_ALL)),
新的HashSet(Arrays.asList(FileAttributes.FILE\u ATTRIBUTE\u NORMAL)),
SMB2ShareAccess.ALL,
SMB2CreateDisposition.FILE\u创建,
新的HashSet(Arrays.asList(SMB2CreateOptions.FILE\u DIRECTORY\u FILE))
);
}
如果(f==null)返回null;
OutputStream os=f.getOutputStream();
写操作(字节);
os.close();
}

我刚刚发布了一个类似问题的答案:

我刚刚在Android上使用,并添加了SMB2支持。 需要一个弹跳城堡/海绵城堡

上传文件 在
DiskShare
上调用
openFile
时,确保设置了正确的标志(通过查看源代码):

//所需的导入
导入com.hierynomus.msdtyp.AccessMask;
导入com.hierynomus.msfscc.FileAttributes;
导入com.hierynomus.mssmb2.SMB2CreateDisposition;
导入com.hierynomus.mssmb2.SMB2CreateOptions;
导入com.hierynomus.mssmb2.SMB2ShareAccess;
导入com.hierynomus.smbj.SMBClient;
导入com.hierynomus.smbj.SmbConfig;
导入com.hierynomus.smbj.auth.AuthenticationContext;
导入com.hierynomus.smbj.common.SMBApiException;
导入com.hierynomus.smbj.connection.connection;
导入com.hierynomus.smbj.session.session;
导入com.hierynomus.smbj.share.DiskShare;
导入com.hierynomus.smbj.share.File;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.array;
导入java.util.HashSet;
...
//连接参数
字符串sambaDomain=null;//可以为空
字符串sambaUsername=“iamuploader”;
字符串sambapas=“mysecret”;
字符串sambaIP=“192.168.1.236”;
字符串sambaSharedPath=“sharedfolder”;
...
//上传方式
//用法:上传(“file/whithin/folder.txt”,fileBytes);
公共无效上载(字符串文件名,字节[]字节)引发IOException{
SmbConfig cfg=SmbConfig.builder().build();
SMBClient=新的SMBClient(cfg);
连接=client.connect(sambaIP);
Session Session=connection.authenticate(新的AuthenticationContext(sambaUsername,sambaPass.ToCharray(),sambaDomain));
DiskShare=(DiskShare)session.connectShare(sambaSharedPath);
//这是com.hierynomus.smbj.share.File!
文件f=null;
int idx=filename.lastIndexOf(“/”);
//如果文件位于文件夹中,请先创建它们
如果(idx>-1){
String folder=filename.substring(0,idx);
试一试{
如果(!share.folderExists(folder))share.mkdir(folder);
}捕获(SMBApiException ex){
抛出新的IOException(ex);
}
}
//我正在创建带有标志file_CREATE的文件,如果文件已经存在,它将抛出
如果(!share.fileExists(filename)){
f=share.openFile(文件名,
新的HashSet(Arrays.asList(AccessMask.GENERIC_ALL)),
新的HashSet(Arrays.asList(FileAttributes.FILE_
// 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();
}