Java examples for javax.naming.directory:Attributes
Gets LDAP attribute value.
/**// w ww.j a va 2s. c om * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2009 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: LDAPUtils.java,v 1.2 2009-08-24 11:37:44 hubertlvg Exp $ * */ import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.naming.Context; import javax.naming.NameNotFoundException; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; public class Main{ private static final Logger logger = Logger.getLogger(LDAPUtils.class .getName()); /** * Gets attribute value. * * @param dn * @param filter * @param key * @return attribute value * @throws BackendException */ public static String searchOneAttributeValue(String dn, String filter, String key, DirContext ctx) throws BackendException { String attr = null; try { String[] ra = { key }; SearchResult sr = LDAPUtils .searchOneRecord(dn, filter, ra, ctx); if (sr != null) { Attributes attrs = sr.getAttributes(); attr = LDAPUtils.getAttributeValue(attrs, key); } } finally { } return attr; } /** * Gets a search result. * * @param baseDN * @param filter * @param returnAttributes * @return the search result. * @throws BackendException */ public static SearchResult searchOneRecord(String baseDN, String filter, String[] returnAttributes, DirContext ctx) throws BackendException { NamingEnumeration ne = null; try { ne = search(baseDN, filter, returnAttributes, ctx); return ne != null ? (ne.hasMore() ? (SearchResult) ne.next() : null) : null; } catch (NamingException e) { logger.log(Level.SEVERE, e.getMessage(), e); throw new BackendException(e.getMessage()); } finally { close(ne); } } /** * Get attribute value. * * @param attrs * @param name * @return the value of the attribute. * @throws BackendException */ public static String getAttributeValue(Attributes attrs, String name) throws BackendException { String val = null; Attribute attr = attrs.get(name); try { if (attr != null) { val = (String) attr.get(); } } catch (NamingException e) { logger.log(Level.SEVERE, e.getMessage(), e); throw new BackendException(e.getMessage()); } return val; } /** * Gets a naming enumeration. * * @param baseDN * @param filter * @param returnAttributes * @return A naming enumeration. * @throws BackendException */ public static NamingEnumeration<SearchResult> search(String baseDN, String filter, String[] returnAttributes, DirContext ctx) throws BackendException { NamingEnumeration<SearchResult> ne = null; boolean found = false; try { SearchControls sc = new SearchControls(); sc.setReturningAttributes(returnAttributes); sc.setSearchScope(SearchControls.SUBTREE_SCOPE); ne = ctx.search(baseDN, filter, sc); found = ne.hasMore(); return found ? ne : null; } catch (NamingException e) { throw new BackendException(e.getMessage()); } finally { // if no records are found close it if (!found) { close(ne); } } } /** * Close context. * * @param ctx */ public static void close(DirContext ctx) { if (ctx == null) { return; } try { ctx.close(); } catch (NamingException ignore) { logger.log(Level.SEVERE, ignore.getMessage(), ignore); } } /** * Close naming enumeration. * * @param ne */ public static void close(NamingEnumeration ne) { if (ne == null) { return; } try { ne.close(); } catch (NamingException ignore) { logger.log(Level.WARNING, ignore.getMessage(), ignore); } } }