jcifs.smb.SmbAuthException: Ошибка входа в систему: неизвестное имя пользователя или неверный пароль.

планирую прочитать файл через Windows из Ubuntu в Java с помощью jcifs. Пробовал простой подход, используя:

String user = "mydomain;myuser:mypassword";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
SmbFile remotefile = new SmbFile("smb://myserver/myfolder/myfile.jar",auth);

Зная, что сервер работает и значения для входа верны, все, что я получаю, это ошибка входа в систему, в чем может быть проблема?


person Sin5k4    schedule 09.07.2012    source источник
comment
какой код ошибки входа возвращается. Для списка кодов ошибок JCIFS jcifs.samba.org/ntstatus.txt   -  person Dungeon Hunter    schedule 23.07.2012
comment
Эй, ты решил эту проблему? Если как? У меня такая же проблема.   -  person mdp    schedule 08.10.2012


Ответы (5)


Не уверен, что у вас это получилось. Но после долгих мучений и мучений я понял, что вызов NtlmPasswordAuthentication должен включать домен. Поэтому, если вы используете опубликованный код @user717630, вам просто нужно изменить вызов NtlmPasswordAuthentication на: NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("mydomain",user, pass);

person peterb    schedule 04.11.2012

Следующая программа проверяет подлинность и записывает файл в защищенную общую папку:

import java.util.Properties;

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;


public class ProtectFolderTest {
private String USER_NAME = null;
private String PASSWORD = null;
private String DOMAIN = null;
private String NETWORK_FOLDER = null;

public static void main(String args[]) {
    try {
        String fileContent = "Hi, This is the SmbFile.";
        new ProtectFolderTest().copyFiles(fileContent, "SmbFile1.text");
    } catch (Exception e) {
        System.err.println("Exception caught. Cause: " + e.getMessage());
    }
}

public boolean copyFiles(String fileContent, String fileName) {
    boolean successful = false;
    String path = null;
    NtlmPasswordAuthentication auth = null;
    SmbFile sFile = null;
    SmbFileOutputStream sfos = null;
    try {
        USER_NAME = "username";
        PASSWORD = "password";
        DOMAIN = "domain";
        NETWORK_FOLDER = "smb://machineName/network_folder/";
        auth = new NtlmPasswordAuthentication(
                DOMAIN, USER_NAME, PASSWORD);
        path = NETWORK_FOLDER + fileName;
        sFile = new SmbFile(path, auth);
        sfos = new SmbFileOutputStream(sFile);
        sfos.write(fileContent.getBytes());
        successful = true;
        System.out.println("File successfully created.");
    } catch (Exception e) {
        successful = false;
        System.err.println("Unable to create file. Cause: "
                + e.getMessage());
    }
    return successful;
}
}

Надеюсь, это полезно. Ожидаем обратной связи по этому поводу.

Спасибо,

Маршал.

person IMJS    schedule 11.12.2012
comment
Привет, я пробовал то же самое, но получаю сообщение об ошибке: неверное имя пользователя или неверный пароль. Я проверил правильность имени пользователя, пароля и домена. - person Varun; 19.03.2020

Вот решение для вас. Я немного изменил код, чтобы сделать его более читаемым. Создайте общую папку и поместите имя общей папки в приведенную ниже переменную (sharedFolder), если вы не знаете, как создать общую папку в Windows ... как всегда, используйте Google. Кроме того, убедитесь, что у используемого вами пользователя есть доступ хотя бы для чтения к этой папке.

    String user = "your_user_name";
    String pass ="your_pass_word";

    String sharedFolder="shared";
    String path="smb://ip_address/"+sharedFolder+"/myfile.jar";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
    SmbFile smbFile = new SmbFile(path,auth);
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
person grepit    schedule 19.10.2012

Попробуйте использовать IP-адрес вместо имени сервера и посмотрите, подключается он или нет. Вероятно, он не может разрешить имя сервера.

person mr_tawan    schedule 22.07.2012

Комментарий к ответу "peterb": "...вызов должен включать домен..."

Я понял, что в моем случае для NtlmPasswordAuthentication("домен", "имя пользователя", "пароль") нужны входные данные следующим образом: домен — это длинный домен с путем к общему ресурсу:\xxxx.domain.xxxx.com\path. имя пользователя — это имя пользователя с доменом: домен\имя пользователя. пароль = пароль.

Я надеюсь, что это поможет кому-то.

БЭМ

person BEM    schedule 07.12.2017