刚进入公司,发现公司采用ldap对用户进行管理,今天就先从这个入手了。加油加油!!!
LDAP, X.500, and directory services密切相关。
一、ldap是什么?
ldap是ietf的标准栈协议,是light directionary access protrol的简称;
ldap的底层协议是x.500即dap,ldap负责的通信协议层是tcp/ip层,能够完成查询、修改、删除、添加功能。
二、名词解释
dn:distinguished name唯一性标识名
cn:common name
c:country
o:organization
ou:organization unit
dc:Domain Component
以上简称可以在schema文件中找到,用的时候查看就行。
三、建立链接
public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; //驱动
public static String MY_HOST = "ldap://localhost:389"; //主机地址和端口
public static String MY_SEARCHBASE = "o=tcl,c=cn"; //基点入口
public static String MY_FILTER= "(
[email protected])"; //过滤条件
public static String MGR_DN="cn=manager,o=tcl,c=cn"; //用户名
public static String MGR_PW="secret"; //密码
public static DirContext createDirContext()
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX);
env.put(Context.PROVIDER_URL,MY_HOST);
env.put(Context.SECURITY_AUTHENTICATION,"simple");
//使用简单认证来认证用户
env.put(Context.SECURITY_PRINCIPAL,MGR_DN);
env.put(Context.SECURITY_CREDENTIALS,MGR_PW);
DirContext ctx = new InitialDirContext(env);
return ctx
}
四、添加新的数据。
public static void addEntry(DirContext context,String dn) throws NamingException {
Attributes attrs = new BasicAttributes();
attrs.put("sn","amy lee");
attrs.put("cn", "AmyLee");
attrs.put("telephoneNumber", "+1 408 555 0033");
attrs.put("userPassword", "redqueen".getBytes());
Attribute objclass = new BasicAttribute("objectClass");
objclass.add("person");
attrs.put(objclass); //指定schema为person,否则cn属性无法识别;
context.createSubcontext(dn, attrs);//dn是要加入的新数据的完整唯一性标识;
}
五、查询数据
public static void query()
{
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
//打印查询结果
while (results != null && results.hasMore()){}
}