【问题标题】:Find user with specific value in employeeID attribute在 employeeID 属性中查找具有特定值的用户
【发布时间】:2012-04-03 13:15:26
【问题描述】:

我试图通过搜索employeeID 属性(每个员工都是唯一的)来查找用户名的CN。我已经让它返回一个包含所有属性的字符串,但我希望它只返回用户的 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();
        }
    }

注意:我知道你可以只从字符串中剪切部分,但我希望它只返回我需要的值。

【问题讨论】:

    标签: java active-directory ldap


    【解决方案1】:

    搜索请求应包含属性列表。一些 API 将返回匹配条目的所有属性。在要返回的属性列表中指定cn,并准备处理多值cn 属性。

    另见

    【讨论】:

      【解决方案2】:

      例如:

      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:安德烈斯·蒙特霍

      姓名:安德烈斯·蒙特霍

      userPrincipalName:andresmontejo@stackoverflow.com

      【讨论】:

        猜你喜欢
        • 2020-01-05
        • 2021-05-19
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 2022-07-02
        • 1970-01-01
        • 2011-04-16
        • 2015-03-24
        相关资源
        最近更新 更多