簡體   English   中英

無法使用 LDAP 連接從 Java 后端檢索 Active Directory 用戶 [LDAP:錯誤代碼 32 – 無此類對象]

[英]Unable to retrieve Active Directory users from Java backend using LDAP connection [LDAP: error code 32 – No Such Object]

我想連接到 AD 並按用戶過濾以檢查它是否存在(uid)。 以后我也會檢查密碼。

現在我已經嘗試實現一些簡單的事情,比如在屏幕上列出所有用戶、他們的姓氏和他們的 id,但它沒有奏效。 目標是獲取包含所有 uid 的列表,並檢查我的網站數據庫中是否存在相同的 uid。

我收到此錯誤:LDAP:錯誤代碼 32 – 沒有此類對象

這是我第一次與 AD 合作,我認為我在 AD 樹上做錯了。

這是我嘗試過的代碼:

public class ActiveDirectory {

    private Properties properties;
    private DirContext dirContext;
    private boolean conected = false;
    private String Error;


    public ActiveDirectory(String username, String password, String domainController) {

        //Path keystore whith the registred SSL certficate
        String keystorePath = "C:\\Program Files\\Java\\jdk-12.0.2\\lib\\security\\cacerts";
        System.setProperty("javax.net.ssl.keyStore", keystorePath);


        System.setProperty("javax.net.ssl.keyStorePassword", "******");

        properties = new Properties();        
        properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        properties.put(Context.SECURITY_AUTHENTICATION,"simple");

        properties.put(Context.PROVIDER_URL, "LDAPS://kldap.***.***:636");
        properties.put(Context.SECURITY_PRINCIPAL, "uid=blabla,ou=blabla,DC=blabla,DC=blabla");
        properties.put(Context.SECURITY_CREDENTIALS, "******");

        //Initializing active directory LDAP connection
        try {
                    dirContext = new InitialDirContext(properties);
                    String searchFilter = "(objectClass=inetOrgPerson)";
                    String[] requiredAttributes= {"sn", "cn", "employeeNumber"};
                    SearchControls controls = new SearchControls();
                    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
                    controls.setReturningAttributes(requiredAttributes);
                    NamingEnumeration users = dirContext.search("ou=Users,o=Company", searchFilter, controls);
                    SearchResult searchResult = null;
                    String commonName = null;
                    String surName = null;
                    String employeeNum = null;
                    while (Users.hasMore()) {
                           searchResult = (SearchResult) Users.next();
                           Attributes attr = searchResult.getAttributes();
                           commonName = attr.get("cn").get(0).toString();
                           surName = attr.get("sn").get(0).toString();
                           employeeNum = attr.get("employeeNumber").get(0).toString();
                           System.out.println("Name: " + commonName);
                           System.out.println("Surname: " + surName);
                           System.out.println("Employee number = " + employeeNum);
                    }
                    conected = true;
             } catch (NamingException e) {
                    conected = false;
                    Error = e.getMessage();
                    LOG.severe(e.getMessage());
                    e.printStackTrace();
             }
    }
       public boolean isConected() {
             if (conected) {
                    return true;
             }else {
                    return false;
             }
       }
       public String getError() {
             return Error;
       }
}

LDAP 樹

解決了!

這是錯誤的: NamingEnumeration users = dirContext.search("ou=Users,o=Company", searchFilter, controls);

正確的做法是:

NamingEnumeration users = dirContext.search("ou=Users,DC=Blabla,DC=Blabla", searchFilter, controls);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM