本文目錄一覽:
- 1、java 連接 ldap 報錯
- 2、Java獲取Ldap葉子節點
- 3、關於ldap java驗證的問題
- 4、如何通過java操作ldap實現登錄
- 5、LDAP在JAVA中如何模糊查詢
- 6、如何使用Java操作LDAP之LDAP連接
java 連接 ldap 報錯
應該是用戶名寫的不對,env.put(Context.SECURITY_PRINCIPAL,”cn=” + username);
這裡面應該寫用戶的全路徑名,比如cn=xxxxx,dc=combatelecom,dc=com
說白了就是你怎麼從根節點找到的用戶,把用戶節點的dn拷貝出來就行了
另外那個URL部分寫成env.put(Context.PROVIDER_URL,”ldap://10.10.0.13:389″)
Java獲取Ldap葉子節點
使用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);
}
}
關於ldap java驗證的問題
我寫過這類代碼,與你這段代碼有些不一樣。
env.put(Context.SECURITY_AUTHENTICATION, “none”);這段中我指定他的認證方式是”simple”,也就是採用用戶名/密碼的方式認證,我也不是很清楚採用none是否能夠成功認證。
認證用的用戶名應該要寫全,你需要查看每一個上級節點的屬性,打個比方,IS是CN,FADU是DC,funo.com.cn是DC,那你的認證用戶名就應該是:
DC=funo.com.cn,DC=FADU,CN=IS,CN=caiwei
你先試一下吧,還有問題再討論,令附上LDAP ERROR CODE:
如何通過java操作ldap實現登錄
catch (NamingException e) {
e.printStackTrace();
} finally {
if(ldapCtx != null) {
try {
ldapCtx.close();
} catch (NamingException e) {
}
}
LDAP在JAVA中如何模糊查詢
/** * 獲得LDAP連接(不通過連接池,直接獲得連接) * @return * @throws Exception */ private javax.naming.directory.DirContext getDirContext() throws Exception { DirContext ctx = null; java.util.Hashtable env = new java.util.Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”); env.put(Context.PROVIDER_URL, “ldap://localhost:389”); env.put(Context.SECURITY_AUTHENTICATION, “simple”); env.put(Context.SECURITY_PRINCIPAL, user); env.put(Context.SECURITY_CREDENTIALS, pwd); ctx = new InitialDirContext(env); return ctx; } /** * 返回用戶查詢介面 * @param DN 查找範圍 ou=test,dc=abcd,dc=com * @param filter 過濾條件 cn=* * @param myserach 搜索範圍 * @return LDAP標準介面 * @throws Exception */ public javax.naming.NamingEnumeration getFilter(String DN,String filter,int myserach) throws Exception { DirContext ctx = getDirContext(); try { NamingEnumeration em; SearchControls con = new SearchControls(); con.setSearchScope(myserach); em = ctx.search(DN, filter, con); return em; } finally { // } } /** * 設置條件查找 * @param dn 查找的根結點 * @param filter 查找條件 * @param level 查找範圍 * @return 返回一個由DN組成的JAVA STRING 列表 * @throws Exception */ public java.util.Vector getfilterNodes(String dn,String filter,int level) throws Exception { java.util.Vector ve=new java.util.Vector(); NamingEnumeration em=getFilter(dn,filter,level); while(em!=null em.hasMoreElements()) { SearchResult rs=(SearchResult)em.nextElement(); String db=rs.getName(); if (db.trim().equals(“”)) ve.add(dn); else ve.add(db+”,”+dn); } return ve; } 查看原帖
如何使用Java操作LDAP之LDAP連接
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”;
HashtableString, String env = new HashtableString, 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);
NamingEnumerationSearchResult 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(“=====================”);
}
}
}
原創文章,作者:WYXQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134936.html