JCIFS Как аутентифицироваться, когда папка открыта для всех?

у нас есть сценарий, в котором мы делимся папкой с группой «Все» (которая, я думаю, включает всех пользователей из вашего домена)

когда мы используем \\server-ip\sharedFolder в Win + R, мы можем подключиться к папке и просматривать без пароля (мой компьютер вошел в систему, используя пользователя в том же домене)

когда я кодирую его в java-приложении, используя класс File, подобный этому

Файл f = новый файл (\\server-ip\sharedFolder);

тогда это тоже работает, но я хочу, чтобы мое приложение работало и на mac/linux, поэтому я пытаюсь использовать JCIFS для этой цели. Но у меня возникают проблемы при аутентификации, что я должен использовать в качестве имени пользователя и пароля, когда гостевая учетная запись также отсутствует. Я попытался

package test;

import java.net.MalformedURLException;

import jcifs.smb.NtlmAuthenticator;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;

public class JCIFSTest {
    public static void main(String args[]){
        String user = "";
        String pass ="";

        String sharedFolder="sup";
        String path="smb://server-ip/"+sharedFolder+"/";
        //ntlm
//     NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
        try {
            SmbFile smbFile = new SmbFile(path,NtlmPasswordAuthentication.ANONYMOUS);
            if(smbFile.isDirectory()){
                for(SmbFile f: smbFile.listFiles()){
                    System.out.println(f.getName());
                    if(f.isDirectory()){
                        for(SmbFile g: f.listFiles()){
                            System.out.println(g.getName());
                        }
                    }
                }
            }
            //SmbFile.
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SmbException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

но это также дает ошибку «Учетная запись отключена». Я предполагаю, что она пытается использовать гостя, который отключен.

так как при соединении с windows с помощью простого \\server-ip\sharedFolder это работает, я думаю будет способ сделать это. Я хочу выяснить, как Windows аутентифицируется, когда мы это делаем ???

РЕДАКТИРОВАТЬ: Нашел способ сделать это. Вам не нужно добавляться в список пользователей, которым разрешен вход в систему. Если вы находитесь в списке «Все» и папка доступна для всех, вам необходимо указать свое имя пользователя и пароль во время проверки подлинности NTLM, и после этого можно будет получить доступ к папкам, к которым предоставлен общий доступ для всех.


person Shariq    schedule 28.03.2014    source источник
comment
Не могли бы вы опубликовать свое редактирование в качестве ответа (и принять его) с кодом, который вы в итоге использовали? Некоторым может быть интересно. Такие люди, как я :)   -  person Matthieu    schedule 07.07.2014


Ответы (1)


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

Никаких изменений в коде не потребовалось. Это было больше концептуально.

На самом деле, когда вы делитесь своим файлом со всеми, он фактически предоставляется всем в вашем ДОМЕНЕ или в гостях, если гостевая учетная запись включена.

Вам нужен какой-то способ аутентификации, когда кто-то пытается получить к нему доступ. Когда вы получаете к нему доступ, как этот \server-ip\sharedFolder, используя Windows, он аутентифицирует себя, используя вашего пользователя, вошедшего в систему, и, если вы являетесь частью того же домена, он дает вам доступ.

Вам нужно сделать то же самое, когда вы подключаетесь через JCIFS, используя linux/mac. Вам нужно указать свое имя пользователя и пароль, и если ваш пользователь является частью этого домена, вы будете аутентифицированы, и вы сможете получить доступ к вещам, которые общедоступны или доступны для всех.

person Shariq    schedule 13.11.2014
comment
Что делать, если у моего имени пользователя нет пароля. Я не использую пароль. - person Anonymous Creator; 27.12.2020