Не могу получить информацию о пользователе после аутентификации из LDAP - PullRequest
0 голосов
/ 28 марта 2019

Я могу авторизоваться из LDAP, но при попытке получить имя пользователя и информацию, которую я получил:

"javax.naming.PartialResultException: [LDAP: код ошибки 10 - 0000202B: RefErr: DSID-0310082F, данные 0, 1 точки доступа

ref 1: 'PKUL' "

Понятия не имею, что я делаю не так. Ниже приведен код, отсюда "if (answer.hasMore ())" он идет в исключение и выдает вышеупомянутую ошибку.

public class ActiveDirectory {

    private String domain;
    private String ldapHost;
    private String searchBase;

    public ActiveDirectory() {
        this.domain = "PKUL";
        this.ldapHost = "ldap://IP:389";
    }

    public Map authenticate(String user, String pass) {

        String returnedAtts[] = { "cn", "givenName", "mail" };
        String searchFilter = "(&(objectClass=user)(sAMAccountName=" + user + "))";

        //Create the search controls

        SearchControls searchCtls = new SearchControls ();
        searchCtls.setReturningAttributes (returnedAtts);

        //Specify the search scope

        searchCtls.setSearchScope (SearchControls.SUBTREE_SCOPE);

        Hashtable env = new Hashtable ();
        env.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put (Context.PROVIDER_URL, ldapHost);
        env.put (Context.SECURITY_AUTHENTICATION, "simple");
        env.put (Context.SECURITY_PRINCIPAL, user + "@" + domain);
        env.put (Context.SECURITY_CREDENTIALS, pass);

        LdapContext ctxGC = null;
        boolean ldapUser = false;

        try {
            ctxGC = new InitialLdapContext (env, null);
            System.out.println ("Authenticated");

            try {
                SearchControls controls = new SearchControls ();
                controls.setSearchScope (SUBTREE_SCOPE);
                String[] attrIDs = { "distinguishedName", "sn", "givenname", "mail", "telephonenumber", "thumbnailPhoto" };
                controls.setReturningAttributes (attrIDs);
                NamingEnumeration<SearchResult> answer = ctxGC.search ("DC=PKUL", "sAMAccountName=" + user, controls);
                if (answer.hasMore ()) {
                    Attributes attrs = answer.next ().getAttributes ();
                    System.out.println (attrs.get ("distinguishedName"));
                    System.out.println (attrs.get ("givenname"));
                    System.out.println (attrs.get ("sn"));
                    System.out.println (attrs.get ("mail"));
                    System.out.println (attrs.get ("telephonenumber"));
                    //byte[] photo = (byte[])attrs.get("thumbnailPhoto").get();               

                } else {
                    System.out.println ("user not found");
                }

            } catch (Exception ex) {
                ex.printStackTrace ();
            }
        } catch (NamingException ex) {
            ex.printStackTrace ();
        }
        return null; // return
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...