【Java】java连接ldap
2014-03-13 16:51
609 查看
首先必须了解ldap,ldap相关可以问度娘。这边我重点要提的是dn(distinguished name),通俗的来说就是唯一标示。
然后现在可以先下一个ldapadmin,通过ldapadmin先连接已经配置好的ldap,下面是微软ad的图。
比如administrator这个用户的dn就是cn=administrator,cn=users,dc=ds-66,dc=com(简单来说就是全路径+域的形式)
最后就可以编码了,连接的代码比较简单,使用fliter的查询部门稍微复杂点,不过仔细看看也很容易理解,如下。
然后现在可以先下一个ldapadmin,通过ldapadmin先连接已经配置好的ldap,下面是微软ad的图。
比如administrator这个用户的dn就是cn=administrator,cn=users,dc=ds-66,dc=com(简单来说就是全路径+域的形式)
最后就可以编码了,连接的代码比较简单,使用fliter的查询部门稍微复杂点,不过仔细看看也很容易理解,如下。
public static void main(String[] args) { String url = "ldap://10.1.0.66:389/"; String domain = "dc=ds-66,dc=com"; String user = "cn=administrator,cn=users"; String password = "111111"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP 工厂 env.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别 env.put(Context.PROVIDER_URL, url); env.put(Context.SECURITY_PRINCIPAL, user+","+domain); // 填DN env.put(Context.SECURITY_CREDENTIALS, password); // AD Password env.put("java.naming.ldap.attributes.binary", "objectSid objectGUID"); LdapContext ldapCtx = null; try { ldapCtx = new InitialLdapContext(env , null); queryGroup(ldapCtx); //queryUser(ldapCtx); } catch (NamingException e) { e.printStackTrace(); } finally { if(ldapCtx != null) { try { ldapCtx.close(); } catch (NamingException e) { } } } } private static void queryGroup(LdapContext ldapCtx) throws NamingException { SearchControls searchCtls = new SearchControls(); searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); String searchFilter = "objectClass=organizationalUnit"; String searchBase = "ou=myDeptSubDept,ou=myDept,dc=DS-66,dc=com"; String returnedAtts[] = {"distinguishedName", "objectGUID", "name"}; searchCtls.setReturningAttributes(returnedAtts); NamingEnumeration<SearchResult> answer = ldapCtx.search(searchBase, searchFilter, searchCtls); while (answer.hasMoreElements()) { SearchResult sr = answer.next(); Attributes Attrs = sr.getAttributes(); if (Attrs != null) { NamingEnumeration<?> ne = Attrs.getAll(); while(ne.hasMore()) { Attribute Attr = (Attribute)ne.next(); String name = Attr.getID(); Enumeration<?> values = Attr.getAll(); if (values != null) { // 迭代 while (values.hasMoreElements()) { String value = ""; if("objectGUID".equals(name)) { value = UUID.nameUUIDFromBytes((byte[]) values.nextElement()).toString(); } else { value = (String)values.nextElement(); } System.out.println(name + " " + value); } } } System.out.println("====================="); } } }
相关文章推荐
- 【LDAP】Java连接Ldap
- 如何使用Java操作LDAP之LDAP连接(一)
- ldap验证用户(java)<不能以simple协议来获取连接进行连接>
- java 连接 LDAP 进行登录验证初接触
- java连接Ldap特定错误【error code】
- java通过ssl连接LDAP服务器(包括LDAP服务器搭建、openssl数字证书生成、openldap服务器配置启动)
- java连接到LDAP
- JAVA实现LDAP连接验证
- java连接Ldap
- java连接微软AD(LDAP)
- java连接ldap
- MySQL数据库连接:java/sql/SQLClientInfoException
- Java 连接Sql server数据库 组件模型
- Tomcat 报错 java.net.connectexception:拒绝连接 解决办法
- java连接数据库进行增添数据的不同写法
- java连接solr并建立索引
- Java连接linux虚拟机的redis报错问题解决办法
- 数据库javaJAVA连接oracle数据库
- JDBC编程学习笔记(一)——与MySQL的连接 ConnMySql.java
- java 短连接+MD5加密短链接