轉自:http://www.webasp.net/article/13/12722_print.htm
|
/* 1. 從LDAP服務器中提取常用名cn、可區分名字uid、密碼userpassword、Email地址mail * 其中使用Netscape LDAP服務器作為測試環境,使用simple認證方式登錄LDAP服務器。 * 2. 用命名‘admin’密碼是‘1’,整個程序使用SDK1.4.1中的JNDI標準接口。 * 3. 為了配合DOMINO數據庫開發,假設用戶登錄時候的IP地址已經記錄在了字段uid中,并用‘,’隔開 * 程序最終將打印一個包括所有用戶名,密碼,IP地址的字符串。 * 4. 在處理分離用戶名和IP地址的時候,引入了正則表達式的使用。 */ package mm;
//引入LDAP的包 import java.lang.*; import java.util.Hashtable; import java.util.Enumeration; import javax.naming.*; import javax.naming.directory.*; //import mm.splitString;
public class JNDISearch{ public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; //驅動 public static String MY_HOST = "ldap://localhost:389"; //主機地址和端口 public static String MY_SEARCHBASE = "o=airius.com"; //基點入口 public static String MY_FILTER = "(mail=west)"; //過濾條件 public static String MGR_DN="uid=admin,ou=Administrators,ou=TopologyManagement,o=NetscapeRoot"; //用戶名 public static String MGR_PW="1"; //密碼 public static String MY_ATTRS[] = {/*"cn","userpassword","mail",*/"cn"}; //StringBuffer res = new StringBuffer(); //用來輸入名字,IP地址的對象 public static String temp = new String();
public String search() throws Exception{ StringBuffer res = new StringBuffer(); try{ //建立連接 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX); env.put(Context.PROVIDER_URL,MY_HOST); env.put(Context.SECURITY_AUTHENTICATION,"simple"); //使用簡單認證來認證用戶 env.put(Context.SECURITY_PRINCIPAL,MGR_DN); env.put(Context.SECURITY_CREDENTIALS,MGR_PW); DirContext ctx = new InitialDirContext(env);
//設置查詢范圍并開始查詢 SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
//打印查詢結果 while (results != null && results.hasMore()){ SearchResult sr = (SearchResult) results.next(); //String dn = sr.getName(); String dn = sr.getName()+","+MY_SEARCHBASE; System.out.println("=============================================="); System.out.println("Distinguished Name is: "+dn);
// 打印指定的字段////////////////////////////////////////////////////////////////// Attributes ar = ctx.getAttributes(dn,MY_ATTRS); if(ar==null) { //對應的uid沒有多余的屬性 System.out.println("Entry "+dn+" has none of the specified attributes\n"); } else { //開始顯示對應的字段 for(int i=0;iAttribute attr = ar.get(MY_ATTRS[i]); if(attr!=null) { System.out.print(MY_ATTRS[i]+" : "); for(Enumeration vals = attr.getAll(); vals.hasMoreElements(); ) { temp = (String)vals.nextElement(); System.out.println("\t"+temp); res.append(temp+"/"); } } System.out.println("\n"); } ///////////////////////////////////////////////////////////////////////////////////
/* 打印全部的字段/////////////////////////////////////////////////////////////////// Attributes attrs = sr.getAttributes(); for(NamingEnumeration ne = attrs.getAll(); ne.hasMoreElements(); ){ Attribute attr = (Attribute) ne.next(); String attrID = attr.getID(); System.out.println(attrID+": "); for(Enumeration vals = attr.getAll();vals.hasMoreElements(); ){ System.out.println("\t"+vals.nextElement()); } *////////////////////////////////////////////////////////////////////////////////// } } }catch (Exception e){ e.printStackTrace(); System.exit(1); } System.out.println(res.toString()+"\n\n\n\n");
//splitString sp = new splitString(); //System.out.println("一共有"+sp.splitString(res.toString()).length+"個返回"); //打印顯示結果,計算返回的數組值 //return sp.splitString(res.toString()); return res.toString();
}
/////////////////////////////////////////////////////////////////////////////////////////// // 使用正則表達式來分揀提取的字符串 /////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
} |
posted on 2005-10-27 16:30
my java 閱讀(470)
評論(0) 編輯 收藏 所屬分類:
JNDI