public class Factory
{
private static Ldap instance;
public synchronized static Ldap creatInstance(){
if(instance==null){
try
{
String className="com.zte.dap.uima.ldap.LdapImpl";
Class<?> c=Class.forName(className);
instance=(Ldap) c.newInstance();
//instance=(Ldap) Class.forName("LdapImpl").newInstance();
}
catch (Exception e)
{
throw new RuntimeException();
}
}
return instance;
}
}
public interface Ldap
{
public void connect() throws NamingException;
public String search(String para) throws NamingException;
public void update() throws NamingException;
public void add() throws NamingException;
public void delete() throws NamingException;
public void close() throws NamingException;
}
public class LdapImpl implements Ldap
{
private DirContext ds;
@Override
public synchronized void connect() throws NamingException
{
Hashtable<String, Object> env=new Hashtable<String,Object>(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://10.43.139.211:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=root,o=ZTE,c=cn");
env.put(Context.SECURITY_CREDENTIALS, "secret");
ds=new InitialDirContext(env);
}
@Override
public String search(String para) throws NamingException
{
String password=null;
SearchControls searchCtls=new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter="uid="+para;
String searchBase="o=ZTE,c=cn";
String returnedAttrs[]={"userPassword"};
searchCtls.setReturningAttributes(returnedAttrs);
NamingEnumeration<SearchResult> entries=ds.search(searchBase, searchFilter, searchCtls);
while(entries.hasMoreElements()){
SearchResult entry=entries.next();
Attributes attrs=entry.getAttributes();
if(attrs!=null){
for(NamingEnumeration<? extends Attribute> names=attrs.getAll();names.hasMore();){
Attribute attr=names.next();
for(NamingEnumeration<?> e =attr.getAll();e.hasMore();){
byte[] s=(byte[]) e.next();
password=new String(s);
}
}
}
}
return password;
}
@Override
public void update() throws NamingException
{
ModificationItem[] mods=new ModificationItem[1];
Attribute attr=new BasicAttribute("sn","张三");
mods[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
ds.modifyAttributes("uid=test,o=founder,c=com", mods);
}
@Override
public void add() throws NamingException
{
Attributes attrs=new BasicAttributes();
attrs.put("uid","test");
attrs.put("sn","test");
attrs.put("cn","test Test");
attrs.put("userPassword", "222222");
Attribute objclass=new BasicAttribute("objectClass");
objclass.add("inetOrgPerson");
attrs.put(objclass);
this.ds.createSubcontext("uid=test,ou=users,o=ZTE,c=cn", attrs);
}
@Override
public void delete() throws NamingException
{
this.ds.destroySubcontext("uid=test,o=founder,c=com");
}
@Override
public void close() throws NamingException
{
ds.close();
}
}
public class TestLdap
{
public static void main(String[] args) throws NamingException
{
Ldap ldap=Factory.creatInstance();
ldap.connect();
try {
// add uid=test,ou=tester,dc=ibm,dc=com
//ldap.add();
// search uid=test
ldap.search("test");
// update cn with new value of "changed name"
//ldap.update();
// search uid=test to see cn value.
//ldap.search();
// delete uid=test,ou=tester,dc=ibm,dc=com
//ldap.delete();
// search again.
//ldap.search();
} finally {
ldap.close();
}
}
}