如何在org.apache.directory.ldap.client.api.LdapConnection中添加带反斜杠的用户名?

时间:2015-11-06 09:51:10

标签: java ldap apache-directory

我遇到LDAP连接问题。当我尝试连接apache目录工作室桌面时,我成功地进行了验证。但是当我尝试用Java做这件事时它失败了。我认为问题在于包含反斜杠“\”的用户名。

LdapConnection connection = new LdapNetworkConnection(ldapIp, ldapPort);
connection.bind( "uid=foo\\bar,ou=example,dc=example,dc=com", "mysEcretpa55" );

在这种情况下,它说

  

线程“main”中的异常org.apache.directory.api.ldap.model.exception.LdapInvalidDnException:意外令牌:b

当我把4个斜杠说:

  

LdapErr:DSID-0C0903C8,评论:AcceptSecurityContext错误,数据52e,v2580

我读到52e是错误凭证的错误。我将再次重复,我在apache目录工作室桌面应用程序中验证它,它工作正常。

1 个答案:

答案 0 :(得分:1)

这是四个斜杠:

    int main(){
    int i = 0 ; int j = 1;
    char key[6]="april",ckey[6];
    printf("Enter the key: ");
    scanf("%s",ckey);
    for(i = 0; i < 6; i++){
      if(ckey[i] != key[i])
            j=0;
    }
    if(j == 1)
        printf(%s,"Correct.");
    else
        printf(%s,"Wrong.");  
    return 0;
}

查看Active Directory: Characters to Escape中的文档。

两个反斜杠用于Java String转义,因此您需要双重转义,一次用于Java,一次用于LDAP语法,以获得单个反斜杠。

对于您收到的LDAP错误,Active Directory拒绝有效密码的情况很多:例如,从不属于域的客户端进行身份验证时( Linux box ),或者如果您尝试进行身份验证的用户没有登录客户端计算机的权限。但请仔细检查您的密码。

this SO answer中提到的结帐提示,了解针对Windows域进行身份验证的其他方法。