[英]LDAP via JAVA without providing password
在C#中,我編寫了下面的代碼來連接到LDAP服務器並查詢相同的內容。
String ldapUrl = "LDAP://...";
DirectoryEntry entry = new DirectoryEntry(ldapUrl);
DirectorySearcher dSearch = new DirectorySearcher(entry);
String Name = "ravi";
dSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + Name + "))";
foreach (SearchResult sResultSet in dSearch.FindAll())
{
String data = "Login Name :" + (GetProperty(sResultSet, "cn")) + "\r\n" +
"First Name :" + (GetProperty(sResultSet, "givenName")) + "\r\n" +
"Middle Initials :" + (GetProperty(sResultSet, "initials")) + "\r\n" +
"Last Name : " + (GetProperty(sResultSet, "sn"));
}
如果您注意到,我沒有提供用戶名和/或密碼。 我認為它使用登錄用戶憑據的操作系統登錄LDAP服務器。
但在JAVA
String url = "ldap://localhost:10389";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(***Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"***);
env.put(***Context.SECURITY_CREDENTIALS, "secret"***);
try {
DirContext ctx = new InitialDirContext(env);
System.out.println("connected");
System.out.println(ctx.getEnvironment());
ctx.close();
} catch (Exception ex) {
System.out.println("error when trying to create the context");
}
java中是否有一種方法可以在不提供用戶名和密碼的情況下綁定到LDAP服務器? 我通過將Context.SECURITY_AUTHENTICATION設置為NONE來嘗試綁定,但是它們會拋出匿名登錄的例外,不允許。 我不知道如何使用匿名用戶憑據,但操作系統登錄用戶憑據。
這可能嗎?怎么樣?
問候,
我使用JNI來調用C#dll ...問題是JNI非常慢。 每次通話大約需要15-20秒
在JAVA中使用命令行(cmd)::來自此堆棧溢出應答
import com4j.Variant;
import com4j.typelibs.ado20.ClassFactory;
import com4j.typelibs.ado20._Command;
import com4j.typelibs.ado20._Connection;
import com4j.typelibs.ado20._Recordset;
public static void queryADForComputers() throws Exception{
String query = "cn,sn,givenName,department";
String filter = "(&(objectclass=user)(objectcategory=person))";
String namingContext = "OU=Desktops,OU=Workstations,OU=HO,DC=win";
_Connection conn = ClassFactory.createConnection();
conn.provider("ADsDSOObject");
conn.open("Active Directory Provider","","",-1);
_Command cmd = ClassFactory.createCommand();
cmd.activeConnection(conn);
cmd.commandText("<LDAP://" + namingContext + ">;" + filter + ";" + query + ";subTree");
_Recordset rs = cmd.execute(null, Variant.getMissing(), -1);
System.out.println("Found " + rs.recordCount() + " users/computers/whatever i was looking for");
//Then here you can use a while loop while(!rs.eof())
//in which you can get each value as rs.fields().item(i).value();
//in my case, i did rs.fields().item(i).value().toString()
//or you can check for its type and go from there.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.