Java/JNDI LDAP/Directory

Материал из Java эксперт
Перейти к: навигация, поиск

Adding a Binding with Attributes to the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; 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; public class Main {

 public static void main(String[] argv) throws Exception {
   Attributes attrs = new BasicAttributes(true);
   Attribute objclass = new BasicAttribute("objectclass");
   objclass.add("top");
   objclass.add("extensible");
   attrs.put(objclass);
   Object obj = "yourObject";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   ctx.bind("cn=Sample", obj, attrs);
 }

}

 </source>
   
  
 
  



Authenticating to the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class Main {

 public static void main(String[] argv) throws Exception {
   String url = "ldap://localhost/o=JNDITutorial";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   env.put(Context.SECURITY_AUTHENTICATION, "simple");
   env.put(Context.SECURITY_PRINCIPAL, "userDN");
   env.put(Context.SECURITY_CREDENTIALS, "secret");
   DirContext ctx = new InitialDirContext(env);
 }

}

 </source>
   
  
 
  



Cancelling a Directory Search

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; 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.SearchResult; public class Main {

 public static void main(String[] argv) throws Exception {
   Attributes matchAttrs = new BasicAttributes(true);
   matchAttrs.put(new BasicAttribute("sn", "YourName"));
   matchAttrs.put(new BasicAttribute("mail"));
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   NamingEnumeration e = ctx.search("ou=People", matchAttrs);
   if (e.hasMore()) {
     SearchResult entry = (SearchResult) e.next();
     // Abandon rest of results
     e.close();
   }
 }

}

 </source>
   
  
 
  



Creating a Directory Entry

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; 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; public class Main {

 public static void main(String[] argv) throws Exception {
   Attributes attrs = new BasicAttributes(true);
   Attribute objclass = new BasicAttribute("objectclass");
   objclass.add("top");
   objclass.add("extensible");
   attrs.put(objclass);
   
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   Context entry = ctx.createSubcontext("cn=Sample", attrs);
 }

}

 </source>
   
  
 
  



Creating an Initial Context to a Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class Main {

 public static void main(String[] argv) throws Exception {
   String url = "ldap://localhost/o=JNDITutorial";
   Hashtable env = new Hashtable();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   DirContext ctx = new InitialDirContext(env);
 }

}

 </source>
   
  
 
  



Getting an Attribute"s Schema from the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class Main {

 public static void main(String[] argv) throws Exception {
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   // Get an attribute of that type
   Attributes attrs = ctx.getAttributes("cn=YourName, ou=People", new String[] { "cn" });
   Attribute cnAttr = attrs.get("cn");
   // Get its attribute definition
   DirContext cnSchema = cnAttr.getAttributeDefinition();
   // Get cnSchema"s attributes
   Attributes cnAttrs = cnSchema.getAttributes("");
 }

}

 </source>
   
  
 
  



Getting an Object"s Schema from the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class Main {

 public static void main(String[] argv) throws Exception {
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   DirContext tedClasses = ctx.getSchemaClassDefinition("cn=YourName, ou=People");
   NamingEnumeration e = tedClasses.search("", null);
   while (e.hasMore()) {
     DirContext entry = (DirContext) e.next();
     System.out.println(entry);
   }
 }

}

 </source>
   
  
 
  



Modifying an Object"s Attributes in the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.directory.BasicAttribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.ModificationItem; public class Main {

 public static void main(String[] argv) throws Exception {
   ModificationItem[] mods = new ModificationItem[3];
   mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail","g@w.ru"));
   mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("number","5555"));
   mods[2] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("jpeg"));
   String url = "ldap://localhost/o=JNDITutorial";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   DirContext ctx = new InitialDirContext(env);
   ctx.modifyAttributes("cn=Name, ou=People", mods);
 }

}

 </source>
   
  
 
  



Performing a Basic Directory Search

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; 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.SearchResult; public class Main {

 public static void main(String[] argv) throws Exception {
   String[] attrIDs = { "sn", "number", "value", "mail" };
   Attributes matchAttrs = new BasicAttributes(true); 
   matchAttrs.put(new BasicAttribute("sn", "YourName"));
   matchAttrs.put(new BasicAttribute("mail"));
   Object obj = "yourObject";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   NamingEnumeration e = ctx.search("ou=People", matchAttrs, attrIDs);
   while (e.hasMore()) {
     SearchResult entry = (SearchResult) e.next();
     System.out.println(entry.getName());
   }
 }

}

 </source>
   
  
 
  



Reading an Object"s Attributes from the Directory

   <source lang="java">

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; public class Main {

 public static void main(String[] argv) throws Exception {
   String url = "ldap://localhost/o=JNDITutorial";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   DirContext ctx = new InitialDirContext(env);
   String[] attrIDs = { "sn", "number", "value", "mail" };
   Attributes answer = ctx.getAttributes("cn=yourName, ou=People", attrIDs);
   NamingEnumeration e = answer.getAll();
   while (e.hasMore()) {
     Attribute attr = (Attribute) e.next();
     System.out.println(attr.getID());
   }
 }

}

 </source>
   
  
 
  



Registering for Namespace Changes in the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.event.EventContext; import javax.naming.event.NamespaceChangeListener; import javax.naming.event.NamingEvent; import javax.naming.event.NamingExceptionEvent; import javax.naming.event.NamingListener; public class Main {

 public static void main(String[] argv) throws Exception {
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "YourURL");
   env.put(Context.SECURITY_AUTHENTICATION, "simple");
   env.put(Context.SECURITY_PRINCIPAL, "userDN");
   env.put(Context.SECURITY_CREDENTIALS, "secret");
   EventContext ctx = (EventContext) (new InitialContext(env).lookup("ou=People"));
   NamingListener listener = new SampleNCListener();
   ctx.addNamingListener("cn=John", EventContext.ONELEVEL_SCOPE, listener);
 }

} class SampleNCListener implements NamespaceChangeListener {

 public SampleNCListener() {
 }
 public void objectAdded(NamingEvent evt) {
   System.out.println(evt.getNewBinding().getName());
 }
 public void objectRemoved(NamingEvent evt) {
   System.out.println(evt.getOldBinding().getName());
 }
 public void objectRenamed(NamingEvent evt) {
   System.out.println(evt.getOldBinding().getName());
 }
 public void namingExceptionThrown(NamingExceptionEvent evt) {
   System.out.println(evt.getException().getExplanation());
 }

}

 </source>
   
  
 
  



Registering for Object Changes in the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.directory.SearchControls; import javax.naming.event.EventDirContext; import javax.naming.event.NamingEvent; import javax.naming.event.NamingExceptionEvent; import javax.naming.event.NamingListener; import javax.naming.event.ObjectChangeListener; public class Main {

 public static void main(String[] argv) throws Exception {
   String url = "ldap://localhost/o=JNDITutorial";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   env.put(Context.SECURITY_AUTHENTICATION, "simple");
   env.put(Context.SECURITY_PRINCIPAL, "userDN");
   env.put(Context.SECURITY_CREDENTIALS, "secret");
   EventDirContext ctx = (EventDirContext) (new InitialContext(env).lookup("ou=People"));
   NamingListener listener = new SampleObjListener();
   SearchControls ctls = new SearchControls();
   ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
   String filter = "(mail=*)";
   ctx.addNamingListener("cn=YourName", filter, ctls, listener);
 }

} class SampleObjListener implements ObjectChangeListener {

 public SampleObjListener() {
 }
 public void objectChanged(NamingEvent evt) {
   System.out.println(evt.getNewBinding().getName());
   System.out.println(evt.getOldBinding().getName());
 }
 public void namingExceptionThrown(NamingExceptionEvent evt) {
   System.out.println(evt.getException());
 }

}

 </source>
   
  
 
  



Searching a Subtree in the Directory

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; 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 void main(String[] argv) throws Exception {
   SearchControls ctls = new SearchControls();
   ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
   String filter = "(&(sn=YourName)(mail=*))";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   NamingEnumeration e = ctx.search("", filter, ctls);
   while (e.hasMore()) {
     SearchResult entry = (SearchResult) e.next();
     System.out.println(entry.getName());
   }
 }

}

 </source>
   
  
 
  



Searching the Directory by Using a Search Filter

   <source lang="java">

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; 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 void main(String[] argv) throws Exception {
   String[] attrIDs = { "sn", "number", "value", "mail" };
   SearchControls ctls = new SearchControls();
   ctls.setReturningAttributes(attrIDs);
   String filter = "(&(sn=YourName)(mail=*))";
   Hashtable<String, String> env = new Hashtable<String, String>();
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "yourURL");
   DirContext ctx = new InitialDirContext(env);
   NamingEnumeration e = ctx.search("ou=People", filter, ctls);
   while (e.hasMore()) {
     SearchResult entry = (SearchResult) e.next();
     System.out.println(entry.getName());
   }
 }

}

 </source>