【发布时间】:2014-05-08 04:56:49
【问题描述】:
我们有一个场景,我们与组所有人共享一个文件夹(我认为这包括您域中的所有用户)
当我们在 Win+R 中使用 \\server-ip\sharedFolder 时,我们无需任何密码即可连接到文件夹并浏览(我的计算机使用同一域上的用户登录)
当我使用这样的 File 类在 java 应用程序中对其进行编码时
文件 f = new File(\\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是如何进行身份验证的???
编辑:找到了方法。您无需添加到允许登录的用户列表中。 如果您在所有人列表中并且该文件夹与所有人共享,则您需要在 NTLM 身份验证期间提供您的用户名和密码,之后可以访问与所有人共享的文件夹
【问题讨论】:
-
您能否使用您最终使用的代码发布您的编辑作为答案(并接受它)?有些人可能会感兴趣。像我这样的人:)