posts - 23,comments - 12,trackbacks - 0
          轉自: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 閱讀(469) 評論(0)  編輯  收藏 所屬分類: JNDI
          主站蜘蛛池模板: 吴堡县| 建湖县| 彭州市| 岑溪市| 旺苍县| 黄陵县| 鄂尔多斯市| 军事| 元氏县| 壶关县| 浦北县| 高陵县| 武清区| 阿图什市| 平南县| 石狮市| 建昌县| 安陆市| 丰镇市| 永顺县| 阜新市| 昌乐县| 右玉县| 蓝山县| 彰化市| 承德市| 桑植县| 仁寿县| 巴马| 大兴区| 扎赉特旗| 大庆市| 濉溪县| 婺源县| 岳阳市| 诸暨市| 宁乡县| 大庆市| 新民市| 永济市| 理塘县|