JCIFS如何在与Everyone共享文件夹时进行身份验证?

时间:2014-03-28 16:03:04

标签: public smb jcifs

我们有一个场景,我们与群组Everyone共享一个文件夹(我认为它包含您域中的所有用户)

当我们在Win + R中使用\\ server-ip \ sharedFolder时,我们可以连接到该文件夹​​并浏览任何密码(我的计算机使用同一域上的用户登录)

当我使用像这样的

文件类在java应用程序中编码时

文件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();
        }
    }
}

但这也是错误的“帐户已禁用”我猜它试图使用已禁用的访客。

因为当使用简单的\\ server-ip \ sharedFolder连接Windows时,它可以工作,我认为会有一种方法可以做到这一点。 我想知道当我们这样做时,windows是如何进行身份验证的?

编辑:找到了做到这一点的方法。您无需添加到允许登录的用户列表中。 如果您在Everyone列表中并且该文件夹与Everyone共享,则您需要在NTLM身份验证期间提供用户名和密码,并且可以在此之后访问与所有人共享的文件夹

1 个答案:

答案 0 :(得分:1)

然而这个迟到的回复,但正如Matheiu指出的那样,我应该在这里写一个答案来帮助别人。

无需更改代码。这更像是一个概念性的事情。

实际上,当您与所有人共享文件时,如果已启用来宾帐户,则该文件实际上与DOMAIN或访客上的所有人共享。

当有人试图访问时,您需要某种方式进行身份验证。当你像这样访问它 \ server-ip \ sharedFolder使用Windows,它使用您登录的用户进行身份验证,如果您属于同一个域,则可以访问。

当您使用linux / mac通过JCIFS进行连接时,您需要执行相同的操作。您需要提供用户名和密码,如果您的用户属于该域,您将通过身份验证,并且可以访问公开共享或与所有人共享的内容。