Зарегистрированный пользователь на LDAP получить все детали - PullRequest
0 голосов
/ 23 января 2019

Я установил соединение с сервером LDAP в Java, используя:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://XXX");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "DOMAIN\\user.name"); 
env.put(Context.SECURITY_CREDENTIALS, "password");
DirContext ctx = new InitialDirContext(env);
if(ctx != null){
    // get details : samaccount, mail, userprincipal, all fields from AD
}

Я новичок на всех компьютерных языках, но в PHP я могу определить фильтр, используя samaccountname (так же, какuser.name в предыдущем коде), и этот поиск возвращает ассоциативные массивы всех деталей этого пользователя.Как я могу сделать это на Java?Просто используя samaccountname (пользователь введет только значение user.name и его пароль), после того, как привязка будет выполнена, и контекст будет создан, получите все его данные.

Заранее спасибо.

(PS: я не нашел в Google ничего, что могло бы помочь).

1 Ответ

0 голосов
/ 23 января 2019

Вы можете предоставить базу поиска и фильтр, вот пример:

String USER_SEARCH_BASE = "OU=somegroup,dc=company,dc=com";
String USER_SEARCH_FILTER = "(&(sAMAccountName=%username%)(objectclass=user))"

Затем выполните поиск пользователя в контексте:

    Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://XXX");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "DOMAIN\\user.name"); 
            env.put(Context.SECURITY_CREDENTIALS, "password");
            DirContext ctx = new InitialDirContext(env);
            if(ctx != null){
               String []requiredAttributes = {"sn","cn","sAMAccountName","memberOf"};
               SearchControls controls = new SearchControls();
               controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
               controls.setReturningAttributes(requiredAttributes);
               SearchResult searchResult = null;
               NamingEnumeration user = ctx.search(USER_SEARCH_BASE, USER_SEARCH_FILTER, controls);
    while(users.hasMore()){
                searchResult=(SearchResult)users.next();
                Attributes attr = searchResult.getAttributes();
                String commonName = attr.get("cn").get(0).toString();
                System.out.println("Common Name: " + commonName);
               }

            }

Или вы можете отладить контекст и проверить всеатрибуты доступны.Надеюсь, это было полезно.

...