Чтение имен пользователей Active Directory в jsp - PullRequest
0 голосов
/ 20 февраля 2012

Я пытался прочитать имена пользователей в 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);

Не могли бы вы помочь

Ответы [ 2 ]

1 голос
/ 25 октября 2012

Будьте осторожны, эта проблема не полностью идентифицируется кодом 80090308. Поскольку код данных дает некоторые подробности о проблеме:

  • 525 пользователь не найден
  • 52e неверные учетные данные
  • 530 не разрешено входить в систему в это время
  • 531 не разрешено входить в систему на этой рабочей станции
  • 532 срок действия пароля истек
  • 533 учетная запись отключена
  • 701 срок действия учетной записи истек
  • 773 пользователь должен сбросить пароль
  • 775 Учетная запись пользователя заблокирована

См. Эту страницу для более подробной информации: http://www -01.ibm.com / support / docview.wss? Uid = swg21290631

Большое спасибо службе поддержки IBM!

0 голосов
/ 20 февраля 2012

Код ошибки, который вы получили 80090308, можно найти в winerror.h - и там написано

Токен, предоставленный функции, недействителен

Скорее всего, это связано с тем, что Active Directory ожидает, что пароль будет байтовым массивом в кодировке UTF-8, а строка Java не такая.

Попробуйте изменить код следующим образом:

envVars.put(Context.SECURITY_CREDENTIALS, "password".getBytes("UTF8"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...