java - 在jsp中读取Active Directory用户名

标签 java active-directory

我尝试读取 Active Directory 中的用户名,但收到错误消息。错误是: 线程“main”中出现异常 javax.naming.AuthenticationException:[LDAP:错误代码 49 - 80090308:LdapErr:DSID-0C0903AA,注释:AcceptSecurityContext 错误,数据 525,v1772]

但是,我的代码是:

package client;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.directory.*;
    import javax.naming.ldap.*;
    import javax.naming.*;
    import java.util.Hashtable;
    import java.util.Enumeration;
public class AD {
    public AD() {
        super();
    }


            public static void main(String[] args) throws NamingException {
                    Hashtable envVars = new Hashtable();
                    envVars.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
                    envVars.put(Context.PROVIDER_URL, "ldap://" + "IP:Port");
                    envVars.put(Context.SECURITY_AUTHENTICATION, "simple");
                    envVars.put(Context.SECURITY_PRINCIPAL, "username");
                    envVars.put(Context.SECURITY_CREDENTIALS, "password");


                    DirContext myContext = new InitialDirContext(envVars);
                    try{

                    SearchControls searchCtrls = new SearchControls();
                    searchCtrls.setSearchScope(SearchControls.SUBTREE_SCOPE);
                    String[] attributes = { "cn", "telephoneNumber", "sn", "userPrincipalName","memberOf","name" };
                    searchCtrls.setReturningAttributes(attributes);


                    String filter = "(objectClass=organizationalPerson)";
                    NamingEnumeration values = myContext.search("CN=Users,DC=bma.gov.bh,DC=gov,DC=bh",filter, searchCtrls);
                    while (values.hasMoreElements())
                    {
                           SearchResult result = (SearchResult) values.next();
                            Attributes attribs = result.getAttributes();


                            if (null != attribs)
                            {
                                    for (NamingEnumeration ae = attribs.getAll(); ae.hasMoreElements();)
                                    {
                                            Attribute atr = (Attribute) ae.next();
                                            String attributeID = atr.getID();
                                            for (
                                                    Enumeration vals = atr.getAll(); 
                                                    vals.hasMoreElements(); 
                                                    System.out.println(attributeID +": " +vals.nextElement()) );
                                    }
                            }
                    }


                    myContext.close();


                    }

                    catch(Exception e)
                    {
                            //e
                    }
            }



}

问题是从这一行开始的:

DirContext myContext = new InitialDirContext(envVars);

请帮忙

最佳答案

请注意,代码80090308并不能完全识别这个问题。因为数据代码给出了有关该问题的一些详细信息:

  • 未找到 525 个用户
  • 52e 凭据无效
  • 530 目前不允许登录
  • 531 不允许在此工作站登录
  • 532 密码已过期
  • 533 帐户已停用
  • 701 帐户已过期
  • 773 用户必须重置密码
  • 775 个用户帐户已锁定

有关更多详细信息,请参阅此页面:http://www-01.ibm.com/support/docview.wss?uid=swg21290631

非常感谢 IBM 支持!

关于java - 在jsp中读取Active Directory用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9358137/

相关文章:

java - ArrayAdapter 不更新动态数据

java - ANDROID:android-parse 中的电子邮件客户端收件人电子邮件 ID 为空

php - NGINX - Active Directory 单点登录

c# - 如何在 Active Directory 中查询名称中包含美元符号 ($) 的用户?

c# - 如何使用 Active Directory 从属性中检索值?

c# - 删除 DirectoryEntry 中的某些属性(Active Directory,C#)

java - 数据绑定(bind)在对话框中不起作用 - 为什么?

java - 类和对象的概念

java - 使用 Java SDK 获取 couchbase 版本

authentication - Grails spring security LDAP 从 LDAP 基础获取 ROLE