我们有一个场景,我们与群组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身份验证期间提供用户名和密码,并且可以在此之后访问与所有人共享的文件夹答案 0 :(得分:1)
然而这个迟到的回复,但正如Matheiu指出的那样,我应该在这里写一个答案来帮助别人。
无需更改代码。这更像是一个概念性的事情。
实际上,当您与所有人共享文件时,如果已启用来宾帐户,则该文件实际上与DOMAIN或访客上的所有人共享。
当有人试图访问时,您需要某种方式进行身份验证。当你像这样访问它 \ server-ip \ sharedFolder使用Windows,它使用您登录的用户进行身份验证,如果您属于同一个域,则可以访问。
当您使用linux / mac通过JCIFS进行连接时,您需要执行相同的操作。您需要提供用户名和密码,如果您的用户属于该域,您将通过身份验证,并且可以访问公开共享或与所有人共享的内容。