2017-04-10 35 views
2

我正在使用LDAP Microsoft Active Directory和Domino服務器,並且對此很新。通過Java代理獲取Domino Xpages NamePicker中的所有Microsoft Active Directory用戶

我們已經通過Java代理成功提取Domino中的所有Microsoft Active Directory用戶,並在java調試控制檯中打印了所有用戶名。對於這個提到這個http://lotus-blogs.blogspot.in/2009/08/ldap-programming-using-domino-java-step.html鏈接。

現在,我想要獲得Domino Xpages NamePicker中的所有用戶,那麼是否有可能通過java代理獲取Xpages NamePicker中的所有用戶?

正如我們在Xpages NamePicker中看到的那樣,我們可以藉助java bean來獲取Domino用戶。

任何類型的建議將真正讚賞。

我的Java代理是以下各項

import lotus.domino.*; 

public class JavaAgent extends AgentBase { 

    public void NotesMain() { 

     try { 
      Session session = getSession(); 
      AgentContext agentContext = session.getAgentContext(); 

      LDAPQuery.ldapconnect(); 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

import javax.naming.*; 
import javax.naming.directory.*; 
import java.util.*; 

public class LDAPQuery { 

public static void ldapconnect(){ 

String isFound="0"; 

try { 

    System.out.println("inside try 1"); 
Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "PROVIDER_URL"); 
env.put(Context.SECURITY_PRINCIPAL, "UserName"); 
env.put(Context.SECURITY_CREDENTIALS, "password"); 
// Create initial context 
DirContext ctx = new InitialDirContext(env); 
// Specify the ids of the attributes to return 
String[] attrIDs = {"cn","mail"}; 
SearchControls ctls = new SearchControls(); 
ctls.setReturningAttributes(attrIDs); 
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

String filter = "(&(objectCategory=person)(mail=*abc.com))"; 
System.out.println("filter defined"); 
// Search for objects that have those matching attributes 
NamingEnumeration answer = ctx.search("", filter,ctls); 

System.out.println("get the answer!"); 
try { 

    System.out.println("inside try2"); 
while (answer.hasMore()) 
{ 
SearchResult sr = (SearchResult)answer.next(); 
System.out.println("<<" + sr.getName()+">>"); 
Attributes attrs = sr.getAttributes(); 
//System.out.println(sr.getName().matches("/^[0-9]/")); 
System.out.println(attrs.get("cn").get()); 
System.out.println(attrs.get("mail").get()); 
isFound="1"; 
} 

if (isFound=="1") { 
System.out.println("User found in Active Directory!"); 
} else { 
System.out.println("Opps ! User not found in Active Directory!"); 
} 
answer.close(); 
}catch(PartialResultException e) { 

    System.out.println("catch 2"); 
e.printStackTrace(); 
} 
// Close the context when we're done 
ctx.close(); 
} catch (Exception e) { 

    System.out.println("catch 1"); 
e.printStackTrace(); 
} 

} 

public LDAPQuery() { 
// Don't think I'm doing anything here 
} 
} 
+0

您是否試過您的代碼?你遇到問題了嗎?如果是這樣,他們是什麼? –

+0

我們已經運行了代碼,我們已經在java調試控制檯中打印了所有的用戶名,所有的用戶名都根據需要正確打印。但問題是要將這些名稱命名爲選擇器。因爲名字選擇器只有bean選項,但在我們的例子中,它是提供名稱的Java代理。 –

回答

0

好,知道了。

你爲什麼要使用代理而不是使用真正的bean的任何特定原因?在我看來,每次有人打開名字選擇器時撥打一個代理遠遠沒有效果。

除此之外,我沒有看到你的代理的結果如何直接傳遞到名稱選擇器。

第三:看看你的ldap過濾器我相信你的代碼會返回數百甚至數千個名字。使用標準的ExtLib NamePicker對你的用戶來說並不好玩,相信我:每個對話框頁面顯示的名字列表太有限了。但這可能是一個不同的故事。

堅持到namePicker方法有幾種方法,你如何能達到你出現什麼來完成:

  1. 重構你的Java代理到一個JavaBean然後將結果饋送到控制

  2. 考慮去找像IBM TDI這樣的目錄同步工具;因此您的AD數據可以被推送到您選擇的Domino目錄中,然後從您的應用程序中使用標準名稱查找功能

相關問題