jcifs.smb.SmbAuthException:登录失败:未知的用户名或密码错误。

时间:2012-07-09 06:35:57

标签: java jcifs

计划使用jcif从Java中的Ubuntu通过Windows读取文件。使用以下简单方法:

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

知道服务器正常工作且登录值是正确的,我得到的只是登录失败,这可能是什么问题?

5 个答案:

答案 0 :(得分:6)

不确定你是否有这个工作。 但经过多次痛苦和痛苦之后,我认为NtlmPasswordAuthentication电话必须包含域名。 因此,如果您使用的是发布的@ user717630代码,则只需将NtlmPasswordAuthentication调用更改为: NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("mydomain",user, pass);

答案 1 :(得分:3)

以下程序在受保护的共享文件夹上验证和写入文件:

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;
}
}

希望这很有用。期待对此的反馈。

谢谢,

元帅。

答案 2 :(得分:2)

以下是您的解决方案我稍微更改了代码以使其更具可读性。 创建共享文件夹并将共享文件夹名称放在下面的变量(sharedFolder)中 如果你不知道如何在Windows上创建共享文件夹...一如既往地使用谷歌。此外,请确保您使用的此用户至少具有该文件夹的读取权限。

    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);

答案 3 :(得分:1)

尝试使用IP地址而不是服务器名称,看看它是否连接。它可能无法解析服务器名称。

答案 4 :(得分:1)

评论" peterb"答案:" ...电话必须包括域名..."

我发现在我的情况下,NtlmPasswordAuthentication("域","用户名","密码")需要这样的输入: domain是具有共享路径的长域:\ xxxx.domain.xxxx.com \ path。 username是域名:domain \ username。 密码=密码。

我希望这会对某人有所帮助。

BEM