Найти пользователя с конкретным значением в атрибуте employeeID - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь найти CN имени пользователя путем поиска атрибута employeeID (который уникален для каждого сотрудника). Я уже получил его, чтобы он возвращал строку со всеми атрибутами, но я хочу, чтобы он возвращал только CN пользователя (например, «John Doe» или «cn = John Doe»; оба в порядке)

public void getEmployeeId(String id) {
        // TODO stuff
        String groupName = "ou=Accounts,DC=PORTAL,DC=COMPANY,DC=BE";

        try {
            System.out.println("Creating initial directory context...");
            LdapContext ctx = new InitialLdapContext(env, null);

            // Create default search controls
            SearchControls ctls = new SearchControls();


            // Search for user with 'id' as value for employeeID attribute
            String filter = "(&(employeeID=" +id + "))";

            // Search for objects using filter
            NamingEnumeration answer = ctx.search(groupName, filter, ctls);

            // Print the answer
            // Search.printSearchEnumeration(answer);

            System.out.println("-----------------");
            System.out.println(answer.next());
            System.out.println("-----------------");

            // Close the context when we're done
            ctx.close();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

примечание: я знаю, что вы можете просто вырезать части из строки, но я хочу, чтобы она возвращала только нужное мне значение.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Поисковый запрос должен содержать список атрибутов. Некоторые API возвращают все атрибуты из соответствующих записей. Укажите cn в списке возвращаемых атрибутов и будьте готовы обработать многозначный атрибут cn.

см. Также

0 голосов
/ 24 июня 2012

Например:

DirContext ctx = new InitialDirContext(env);
            /***/
            NamingEnumeration<?> namingEnum = ctx.search(
                    "dc=stackoverflow,dc=com, "employeeID=" +id,
                    ctls);
            while (namingEnum.hasMoreElements()) {
                SearchResult result = (SearchResult) namingEnum.next();
                Attributes attrs = result.getAttributes();
                System.out.println(attrs.get("cn"));
                System.out.println(attrs.get("name"));
                System.out.println(attrs.get("userPrincipalName"));
            }
            /***/

результат:

CN: Andres Montejo

NAME: Andres Montejo

userPrincipalName: andresmontejo @ stackoverflow.ком

...