Example usage for javax.naming.directory DirContext search

List of usage examples for javax.naming.directory DirContext search

Introduction

In this page you can find the example usage for javax.naming.directory DirContext search.

Prototype

public NamingEnumeration<SearchResult> search(String name, String filter, SearchControls cons)
        throws NamingException;

Source Link

Document

Searches in the named context or object for entries that satisfy the given search filter.

Usage

From source file:org.opentravel.schemacompiler.security.impl.JNDIAuthenticationProvider.java

/**
 * @see org.opentravel.schemacompiler.security.AuthenticationProvider#searchCandidateUsers(java.lang.String, int)
 *//*from   w  w w.  j  a  v  a  2  s . com*/
@Override
public List<UserPrincipal> searchCandidateUsers(String searchCriteria, int maxResults)
        throws RepositoryException {
    List<UserPrincipal> userList = new ArrayList<>();

    if ((searchCriteria != null) && (searchCriteria.length() > 0)) {
        List<String> searchAttributes = Arrays.asList(userLastNameAttribute, userFirstNameAttribute,
                userFullNameAttribute);
        StringBuilder searchFilter = new StringBuilder("(&(objectCategory=person)(").append(userIdAttribute)
                .append("=*)(|");
        SearchControls constraints = new SearchControls();
        DirContext context = null;

        for (String searchAttr : searchAttributes) {
            if ((searchAttr != null) && (searchAttr.length() > 0)) {
                searchFilter.append("(").append(searchAttr).append("=*").append(searchCriteria).append("*)");
            }
        }
        searchFilter.append("))");
        constraints.setSearchScope(
                searchUserSubtree ? SearchControls.SUBTREE_SCOPE : SearchControls.ONELEVEL_SCOPE);
        constraints.setTimeLimit(userSearchTimeout);
        constraints.setCountLimit(maxResults);
        constraints.setReturningAttributes(new String[] { userIdAttribute, userLastNameAttribute,
                userFirstNameAttribute, userEmailAttribute });

        try {
            context = openConnection(connectionPrincipal, connectionPassword);
            NamingEnumeration<SearchResult> searchResults = context.search(userSearchBase,
                    searchFilter.toString(), constraints);

            while (searchResults.hasMore()) {
                SearchResult resultItem = searchResults.next();
                Attributes itemAttrs = resultItem.getAttributes();
                String userId = getAttributeValue(itemAttrs, userIdAttribute);
                String lastName = getAttributeValue(itemAttrs, userLastNameAttribute);
                String firstName = getAttributeValue(itemAttrs, userFirstNameAttribute);
                String email = getAttributeValue(itemAttrs, userEmailAttribute);
                UserPrincipal user = new UserPrincipal();

                user.setUserId(userId);
                user.setLastName(lastName);
                user.setFirstName(firstName);
                user.setEmailAddress(email);
                userList.add(user);
            }

        } catch (PartialResultException | SizeLimitExceededException e) {
            // Ignore - this means we have reached the end of the list and that any remaining
            // items are aliased referrals which cannot be resolved.

        } catch (NamingException e) {
            throw new RepositoryException("Error encountered during directory search.", e);
        }
    }
    return userList;
}

From source file:org.opentravel.schemacompiler.security.impl.JNDIAuthenticationProvider.java

/**
 * Searches the remote directory for the user's entry and returns its distinguished name
 * string.// ww  w .  j  a  v a2s  .  co  m
 * 
 * @param userId
 *            the ID of the user whose DN is to be retrieved
 * @param context
 *            the directory context from which to retrieve the user's DN
 * @return String
 * @throws NamingException
 */
protected String findUserDn(String userId, DirContext context) throws NamingException {
    String userDn = null;

    for (MessageFormat userSearchPattern : userSearchPatterns) {
        try {
            String searchFilter = userSearchPattern.format(new String[] { userId });
            SearchControls constraints = new SearchControls();

            constraints.setSearchScope(
                    searchUserSubtree ? SearchControls.SUBTREE_SCOPE : SearchControls.ONELEVEL_SCOPE);
            constraints.setTimeLimit(userSearchTimeout);

            NamingEnumeration<SearchResult> results = context.search(userSearchBase, searchFilter, constraints);
            SearchResult result = null;

            try {
                if ((results != null) && results.hasMore()) {
                    result = results.next();

                    // Make sure only one entry exists for the requested user
                    if (results.hasMore()) {
                        log.warn("Multiple entries found for user: " + userId);
                        result = null;
                    }
                }
            } catch (PartialResultException e) {
                // Ignore partial result errors - most likely due to ActiveDirectory referrals
            }

            if (result != null) {
                userDn = result.getNameInNamespace();
                break;
            }

        } catch (NameNotFoundException e) {
            // Ignore and keep searching
        }
    }
    return userDn;
}

From source file:org.orbeon.oxf.processor.LDAPProcessor.java

private List search(DirContext ctx, String rootDN, String scope, String filter, String[] attributes) {
    try {//from w  w w.ja  v a 2 s .co  m
        List listResults = new ArrayList();
        SearchControls constraints = new SearchControls();

        constraints.setSearchScope(convertSearchScope(scope));
        constraints.setReturningAttributes(attributes);

        try {
            if (scope != null && scope.toUpperCase().equals("ALLLEVELS")) {
                String[] levels = rootDN.split(",");
                for (int i = 0; i < levels.length; i++) {
                    String[] currentLevels = new String[levels.length - i];
                    System.arraycopy(levels, i, currentLevels, 0, levels.length - i);
                    String levelRootDN = StringUtils.join(currentLevels, ",");
                    if (logger.isDebugEnabled())
                        logger.debug("LDAP Search on level " + levelRootDN);
                    NamingEnumeration results = ctx.search(levelRootDN, filter, constraints);
                    for (; results.hasMore();) {
                        SearchResult result = (SearchResult) results.next();
                        listResults.add(result);
                    }
                }
            } else {
                NamingEnumeration results = ctx.search(rootDN, filter, constraints);
                for (; results.hasMore();) {
                    SearchResult result = (SearchResult) results.next();
                    listResults.add(result);
                }
            }

        } catch (NameNotFoundException e) {
            // for example in case of ALLLEVELS scope, if the LDAP database suffix has more than one component, the last iteration would result in NameNotFoundException
        }
        return listResults;
    } catch (NamingException e) {
        throw new OXFException("LDAP Search Failed", e);
    }
}

From source file:org.projectforge.business.ldap.LdapDao.java

public List<T> findAll(final DirContext ctx, final String organizationalUnit) throws NamingException {
    final LinkedList<T> list = new LinkedList<T>();
    NamingEnumeration<?> results = null;
    final SearchControls controls = new SearchControls();
    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    final String searchBase = getSearchBase(organizationalUnit);
    results = ctx.search(searchBase, "(objectclass=" + getObjectClass() + ")", controls);
    while (results.hasMore()) {
        final SearchResult searchResult = (SearchResult) results.next();
        final String dn = searchResult.getName();
        final Attributes attributes = searchResult.getAttributes();
        list.add(mapToObject(dn, searchBase, attributes));
    }//from   w w  w.j  ava2 s  .c o  m
    return list;
}

From source file:org.projectforge.business.ldap.LdapDao.java

public T findById(final DirContext ctx, final Object id, final String... organizationalUnits)
        throws NamingException {
    NamingEnumeration<?> results = null;
    final SearchControls controls = new SearchControls();
    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    final String searchBase = getSearchBase(organizationalUnits);
    final String args = "(&(objectClass=" + getObjectClass() + ")(" + getIdAttrId() + "=" + buildId(id) + "))";
    results = ctx.search(searchBase, args, controls);
    if (results.hasMore() == false) {
        return null;
    }//from  w  ww.  jav  a  2  s  . c  o m
    final SearchResult searchResult = (SearchResult) results.next();
    final String dn = searchResult.getName();
    final Attributes attributes = searchResult.getAttributes();
    if (results.hasMore() == true) {
        log.error("Oups, found entries with multiple id's: " + getObjectClass() + "." + id);
    }
    return mapToObject(dn, searchBase, attributes);
}

From source file:org.springframework.ldap.core.LdapTemplate.java

public void search(final Name base, final String filter, final SearchControls controls,
        NameClassPairCallbackHandler handler) {

    // Create a SearchExecutor to perform the search.
    SearchExecutor se = new SearchExecutor() {
        public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
            return ctx.search(base, filter, controls);
        }//w w  w  . j  av a 2 s.c  om
    };
    if (handler instanceof ContextMapperCallbackHandler) {
        assureReturnObjFlagSet(controls);
    }
    search(se, handler);
}

From source file:org.springframework.ldap.core.LdapTemplate.java

public void search(final String base, final String filter, final SearchControls controls,
        NameClassPairCallbackHandler handler) {

    // Create a SearchExecutor to perform the search.
    SearchExecutor se = new SearchExecutor() {
        public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
            return ctx.search(base, filter, controls);
        }/* w w w  .j  a  v  a2s . c o  m*/
    };
    if (handler instanceof ContextMapperCallbackHandler) {
        assureReturnObjFlagSet(controls);
    }
    search(se, handler);
}

From source file:org.springframework.ldap.core.LdapTemplate.java

public void search(final Name base, final String filter, final SearchControls controls,
        NameClassPairCallbackHandler handler, DirContextProcessor processor) {

    // Create a SearchExecutor to perform the search.
    SearchExecutor se = new SearchExecutor() {
        public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
            return ctx.search(base, filter, controls);
        }//from  w w  w  .ja v a  2  s  .  c  om
    };
    if (handler instanceof ContextMapperCallbackHandler) {
        assureReturnObjFlagSet(controls);
    }
    search(se, handler, processor);
}

From source file:org.springframework.ldap.core.LdapTemplate.java

public void search(final String base, final String filter, final SearchControls controls,
        NameClassPairCallbackHandler handler, DirContextProcessor processor) {

    // Create a SearchExecutor to perform the search.
    SearchExecutor se = new SearchExecutor() {
        public NamingEnumeration executeSearch(DirContext ctx) throws javax.naming.NamingException {
            return ctx.search(base, filter, controls);
        }//from   ww w .  j a v  a 2s.c o  m
    };
    if (handler instanceof ContextMapperCallbackHandler) {
        assureReturnObjFlagSet(controls);
    }
    search(se, handler, processor);
}

From source file:org.springframework.ldap.demo.dao.PersonDaoImpl.java

public List<String> getAllPersonNames() {
    DirContext ctx = createAnonymousContext();

    LinkedList<String> list = new LinkedList<String>();
    NamingEnumeration<?> results = null;
    try {//from ww  w. j  av  a 2 s  .  co m
        SearchControls controls = new SearchControls();
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        results = ctx.search("", "(objectclass=person)", controls);

        while (results.hasMore()) {
            SearchResult searchResult = (SearchResult) results.next();
            Attributes attributes = searchResult.getAttributes();
            Attribute attr = attributes.get("cn");
            String cn = (String) attr.get();
            list.add(cn);
        }
    } catch (NamingException e) {
        throw new RuntimeException(e);
    } finally {
        if (results != null) {
            try {
                results.close();
            } catch (Exception e) {
                // Never mind this.
            }
        }
        if (ctx != null) {
            try {
                ctx.close();
            } catch (Exception e) {
                // Never mind this.
            }
        }
    }
    return list;
}