Java/JNDI LDAP/Name
Содержание
- 1 Getting an Object"s Fully Qualified Name
- 2 Parsing a JNDI Composite Name
- 3 Parsing a JNDI Compound Name
- 4 Replace the placeholders in the filter with the proper values from the userName
- 5 Show only the common name (cn) and e-mail address (mail) attributes
- 6 Using a URL as a Name to the Initial Context
Getting an Object"s Fully Qualified Name
<source lang="java">
import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; public class Main {
public static void main(String[] argv) throws Exception { String url = "iiop://localhost/"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); env.put(Context.PROVIDER_URL, url); Context ctx = new InitialContext(env); // Create a subcontext. Context childCtx = ctx.createSubcontext("child"); // Destroy the subcontext. ctx.destroySubcontext("child"); Context obj = (Context) childCtx.lookup("grandChild"); String fullname = obj.getNameInNamespace(); }
}
</source>
Parsing a JNDI Composite Name
<source lang="java">
import javax.naming.rupositeName; public class Main {
public static void main(String[] argv) throws Exception { CompositeName composite = new CompositeName("cn=John,o=hits/summary.txt"); String first = composite.get(0); String last = composite.get(composite.size() - 1); composite.add(0, "yourname.ru"); composite.remove(2); }
}
</source>
Parsing a JNDI Compound Name
<source lang="java">
import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Name; import javax.naming.NameParser; public class Main {
public static void main(String[] argv) throws Exception { String url = "iiop://localhost/"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); env.put(Context.PROVIDER_URL, url); Context ctx = new InitialContext(env); NameParser parser = ctx.getNameParser(""); Name dn = parser.parse("cn=John, ou=People, o=JNDITutorial"); dn.remove(1); dn.add(0, "c=us"); dn.add("cn=fs"); }
}
</source>
Replace the placeholders in the filter with the proper values from the userName
<source lang="java">
/*
* Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license * distributed with this file and available online at * http://www.ja-sig.org/products/cas/overview/license/ */
import java.util.HashMap; import java.util.Map; import javax.naming.NamingException; import javax.naming.directory.DirContext;
/**
* Utilities related to LDAP functions. * * @author Scott Battaglia * @version $Revision: 42053 $ $Date: 2007-06-10 09:17:55 -0400 (Sun, 10 Jun 2007) $ * @since 3.0 */
public final class LdapUtils {
private LdapUtils() { // private constructor so that no one can instantiate. } /** * Utility method to replace the placeholders in the filter with the proper * values from the userName. * * @param filter * @param userName * @return the filtered string populated with the username */ public static String getFilterWithValues(final String filter, final String userName) { final Map<String, String> properties = new HashMap<String, String>(); final String[] userDomain; String newFilter = filter; properties.put("%u", userName.replace("\\", "\\\\")); userDomain = userName.split("@"); properties.put("%U", userDomain[0]); if (userDomain.length > 1) { properties.put("%d", userDomain[1]); final String[] dcArray = userDomain[1].split("\\."); for (int i = 0; i < dcArray.length; i++) { properties.put("%" + (i + 1), dcArray[dcArray.length - 1 - i]); } } for (final String key : properties.keySet()) { final String value = properties.get(key); newFilter = newFilter.replaceAll(key, value); } return newFilter; } /** * Close the given context and ignore any thrown exception. This is useful * for typical finally blocks in manual Ldap statements. * * @param context the Ldap context to close */ public static void closeContext(final DirContext context) { if (context != null) { try { context.close(); } catch (NamingException ex) { } } }
}
</source>
Show only the common name (cn) and e-mail address (mail) attributes
<source lang="java">
import java.util.Enumeration; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; public class Main {
public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; public static String MY_HOST = "ldap://localhost:1389"; public static String MY_SEARCHBASE = "o=server.ru"; public static String MY_FILTER = "(sn=Carter)"; public static String MY_ATTRS[] = { "cn", "mail" }; public static void main(String args[]) throws Exception { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX); env.put(Context.PROVIDER_URL, MY_HOST); DirContext ctx = new InitialDirContext(env); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = ctx.search(MY_SEARCHBASE, MY_FILTER, constraints); while (results != null && results.hasMore()) { SearchResult sr = (SearchResult) results.next(); String dn = sr.getName() + ", " + MY_SEARCHBASE; System.out.println("Distinguished Name is " + dn); Attributes ar = ctx.getAttributes(dn, MY_ATTRS); if (ar == null) { System.out.println("Entry " + dn + " has none of the specified attributes\n"); return; } for (int i = 0; i < MY_ATTRS.length; i++) { Attribute attr = ar.get(MY_ATTRS[i]); if (attr == null) { continue; } System.out.println(MY_ATTRS[i] + ":"); for (Enumeration vals = attr.getAll(); vals.hasMoreElements();) { System.out.println("\t" + vals.nextElement()); } } } }
}
</source>
Using a URL as a Name to the Initial Context
<source lang="java">
import javax.naming.InitialContext; public class Main {
public static void main(String[] argv) throws Exception { Object obj = new InitialContext().lookup("iiop://localhost/Sample"); }
}
</source>