有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    请参见this list以获取可以从LDAP检索的所有属性


    例如,假设您想要用户的姓名、组、职务、电话号码和电子邮件。(为了与你的问题保持一致,我将使用与你的链接相同的“虚拟值”)

    第一步是在Java类中连接到LDAP,为此我宁愿使用一个单独的函数:

    public static Hashtable<String, String> getContextEnv() {
      Hashtable<String, String> contextEnv = new Hashtable<String, String>();
      contextEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
      contextEnv.put(Context.PROVIDER_URL, "ldap://dc.mydomain.com:3268");
      contextEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
      contextEnv.put(Context.SECURITY_PRINCIPAL, "CN=TECHNICAL_USER,DC=mydomain,DC=com");
      contextEnv.put(Context.SECURITY_CREDENTIALS, "TECHNICAL_USER_PASSWORD");
      contextEnv.put("java.naming.referral", "follow");
      contextEnv.put("java.naming.ldap.derefAliases", "never");
      contextEnv.put("com.sun.jndi.ldap.connect.pool", "true");
      contextEnv.put("com.sun.jndi.ldap.connect.timeout", "60000");
    
      return contextEnv;
    }
    

    其中,TECHNICAL_USER是使用ktpass命令创建键表的用户


    下一步是调用该函数,并创建一个SearchControls对象。在这里,您将放置想要获取的属性(请参阅上面的链接了解所有可能性)和一些参数(例如超时):

    Hashtable<String, String> contextEnv = getContextEnv();
    
    DirContext ctx = new InitialDirContext(contextEnv);    
    
    // UserID - Last Name - First Name - Group - Job Title - Phone Number - Email address
    String[] attrIDs = { "sAMAccountName", "sn", "givenName", "memberOf", "title", "telephoneNumber", "mail"};
    SearchControls searchControls = new SearchControls();
    searchControls.setReturningAttributes(attrIDs);
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchControls.setTimeLimit(6000);
    

    最后一步,您将获得当前用户的信息,其中currentUser是公司用于识别员工的用户ID:

    NamingEnumeration<SearchResult> searchResults = ctx.search("DC=mydomain,DC=com", "(sAMAccountName=" + currentUser + ")", searchControls);
    
    if (searchResults.hasMore()) {
      SearchResult currentSearchResult = searchResults.next();
      Attributes searchResultAttributes = currentSearchResult.getAttributes();
    
      String userID = searchResultAttributes.get("sAMAccountName");
      String lastName = searchResultAttributes.get("sn");
      String firstName = searchResultAttributes.get("givenName");
      String group = searchResultAttributes.get("memberOf");
      String jobTitle = searchResultAttributes.get("title");
      String phoneNumber = searchResultAttributes.get("telephoneNumber");
      String email = searchResultAttributes.get("mail");
    
      searchResults.close();
    }
    
    ctx.close();