如何使用Java *** 作LDAP之LDAP连接

如何使用Java *** 作LDAP之LDAP连接,第1张

public static void main(String[] args) {

String url = "ldap://10.0.0.10:389/"

String domain = "dc=dtas,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("=====================")

}

}

}

使用netscape的ldap工具包。使用其它启告的工具包,写法类似。

注:必须知道base dn,以下假渗友定ou=admin为base dn。若有明确的base dn,那写法比如:ou=admin,o=test1

源代码如下:

==========================

import netscape.ldap.*

public class SearchTest {

public static void main(String[] args) {

LDAPConnection lc = null

LDAPEntry findEntry = null

int status = -1

try {

//lc = ConnectionPool.

lc = new LDAPConnection()

/* Connect to server */

String MY_HOST = "localhost"

int MY_PORT = 389

lc.connect(MY_HOST, MY_PORT)

System.out.println("1=========" +lc.isConnected())

lc.authenticate("cn=Directory Manager","password")

System.out.println("2=========" +lc.isConnected())

/* search for all entries with surname of Jensen */

String MY_FILTER = "(objectclass=*)"

String MY_SEARCHBASE = "ou=admin"

LDAPSearchConstraints cons = lc.getSearchConstraints()

cons.setBatchSize(0)

cons.setMaxResults(5)

MY_FILTER = "(objectclass=*)"

LDAPSearchResults res = lc.search(MY_SEARCHBASE,

LDAPConnection.SCOPE_ONE,

MY_FILTER,

null,

false,

cons)

while (res.hasMoreElements()) {

LDAPEntry cLDAPEntry = res.next()

System.out.println("" + cLDAPEntry.getDN())

System.out.println("" + cLDAPEntry.toString())

}

status = 0

} catch (LDAPException e) {

System.out.println("Error: " + e.toString())

e.printStackTrace()

}

/* Done, so disconnect */丛旁槐

if ((lc != null) &&lc.isConnected()) {

try {

lc.disconnect()

System.out.println("3=========" +lc.isConnected())

} catch (LDAPException e) {

System.out.println("Error: " + e.toString())

}

}

System.out.println("4=========" +lc.isConnected())

System.exit(status)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12133738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存