空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          用JAVA實現LDAP的訪問(一)
          關鍵字:   用JAVA實現LDAP的訪問(一)    
           LDAP現在用的越來越多,所謂LDAP既Lightweight Directory Access Protocol。關于它的一些基本知識,我在這里就不做系統的介紹了,網上有很多的資料。我主要說一下在JAVA的語言環境中,怎樣來操作LDAP。
              在這里,我推薦兩個工具:LDAPTemplate和JLDAP。
              網上的資料比較少,而且不少都是E文的,可能英語不太好的朋友,就很難入門了。在這我把我的經驗總結一下,和大家分享。
              LDAPTemplate是基于Spring1.2.7來開發的,其用法和Spring的JDBCTemplate差不多。最初,我是用這個開源的框架來對LDAP進行操作的,但是后來由于開發工具的轉變,由eclipse轉到了RAD上,而RAD所用的JDK卻不支持Spring1.2.7(看來網上的謠傳沒錯,IBM總在某個陰暗的角落在和SUN作對),沒辦法,只好另辟蹊徑。后來發現了JLDAP,經過一番研究,發現它用起來并不比LDAPTemplate復雜,但在對象持久化方面需要自己去做,而LDAPTemplate通過AttributeMappers就可以把查詢到的結果轉換成POJO了。

          用JAVA實現LDAP的訪問(二)
          關鍵字:   用JAVA實現LDAP的訪問(二)    
           下面來具體的說一下怎么用JLDAP。首先要去下載一下JLDAP,具體下載的地址可以上網去搜。下載下來以后,lib里面的是開發所要用到的包,doc里面是幫助文檔API和示例程序。
              先說說怎么查詢,其實查詢非常的簡單,如果用過JDBC連數據庫的話,那么連LDAP相比起來更加的簡單。
              首先建立一個LDAPConnection對象。這個對象也可以通過連接池PoolManager來獲得。LDAPConnection con = new LDAPConnection();然后運行connect方法和bind方法。連接上LDAP以后,就可以通過search方法來查找數據了。示例程序如下:
          java 代碼
          LDAPConnection lc = new LDAPConnection();   
                 try {   
                     lc.connect("6.1.19.154",389);   
                     lc.bind(LDAPConnection.LDAP_V3,"cn=xxx","xxxxxx");   
                     LDAPSearchResults rs = lc.search("dc=excel,dc=com,dc=cn",LDAPConnection.SCOPE_SUB,"objectClass=*",null,false);   
                     int count = 0;   
                     while(rs.hasMore()){   
                         LDAPEntry entry = rs.next();   
                         System.out.println(entry.getDN());   
                         count++;   
                     }   
                     System.out.println("共有"+count+"條記錄。");   
                 } catch (LDAPException e) {   
                       
                     System.err.print("連接異常!   ");   
                     e.printStackTrace();   
                 }  
           

          10:33  |   永久鏈接  |   瀏覽 (1717)  |   評論 (5)  |    收藏  |   ldap  |   進入論壇  |    

          永久鏈接
          http://junewolf.javaeye.com/blog/52090 

          評論    共 5 條  發表評論 

          Dustbin     2007-03-30 16:39
          這樣的程序會導致ldap服務器死機地,需要關閉ldap連接
           

          Hejrcc     2007-06-14 21:05
          呵呵, 就是。。。
           

          Hejrcc     2007-06-14 21:10
          看不出用JLDAP有什么優勢, 我也剛剛開始學。
          我寫了個測試例子,請指點:


          代碼
          public void testLdap() {  
              try {  
                  DirContext context = getContext();  
                  addEntry(context, "uid=oracle,ou=people,dc=mycompany,dc=com");  
                  printEntry(context, "uid=oracle,ou=people,dc=mycompany,dc=com");  
                  context.close();  
              } catch (AuthenticationException e) {  
                  e.printStackTrace();  
              } catch (NamingException e) {  
                  e.printStackTrace();  
              }  
          }  
           
          public DirContext getContext() throws NamingException {  
              Hashtable<String, String> env = new Hashtable<String, String>();  
              env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=mycompany,dc=com");  
              env.put(Context.SECURITY_CREDENTIALS, "secret");  
              env.put(Context.SECURITY_AUTHENTICATION, "simple"); //"none", "simple", "strong"  
           
              DirContext initial = new InitialDirContext(env);  
              DirContext context = (DirContext) initial.lookup("ldap://localhost:389");  
              return context;  
          }  
           
          public void addEntry(DirContext context, String dn) throws NamingException {  
              Attributes attrs = new BasicAttributes();  
              attrs.put("uid", "oracle");  
              attrs.put("sn", "Lee");  
              attrs.put("cn", "Amy Lee");  
              attrs.put("telephoneNumber", "+1 408 555 0033");  
              attrs.put("userPassword", "redqueen".getBytes());  
              //the following attribute has two values  
              Attribute objclass = new BasicAttribute("objectClass");  
              objclass.add("uidObject");  
              objclass.add("person");  
              attrs.put(objclass);  
           
              context.createSubcontext(dn, attrs);  

           

          Hejrcc     2007-06-14 21:13
          看見還有一種寫法用來獲取 DirContext, 下面的寫法指定了 INITIAL_CONTEXT_FACTORY屬性,我想知道我前面一種寫法里面, env.put(Context.INITIAL_CONTEXT_FACTORY, ?);
          這個INITIAL_CONTEXT_FACTORY 我沒有設置, 不知道默認是什么?


          代碼
          Hashtable<String, String> env = new Hashtable<String, String>();  
          env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");  
          env.put(Context.PROVIDER_URL, "ldap://localhost:389");  
          env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=mycompany,dc=com");  
          env.put(Context.SECURITY_CREDENTIALS, "secret");  
          //env.put(Context.SECURITY_AUTHENTICATION, "simple"); //"none", "simple", "strong"           
          DirContext context = new InitialDirContext(env); 
           

          用JAVA實現LDAP的訪問(三)
          關鍵字:   用JAVA實現LDAP的訪問(三)    
            雖然LDAP主要是用來進行讀操作的,但不可避免的,我們也要向其中添加一些新的數據。用JLDAP向LDAP服務器添加數據的操作也是非常簡單的。
             為什么說非常簡單呢,因為大體上也就是分三步。第一步,連接LDAP服務器。第二步,建立一個要添加的新的實體LDAPEntry,并添加相應的屬性。第三步,通過add方法向LDAP中添加實體。
             首先說連接服務器。還是非常簡單的三步:
          java 代碼
          LDAPConnection con = new LDAPConnection();   
           con.connect("hostname",hostport);   
           con.bind("version","DN","password");  

          連接后,可以建實體了,也就相當與為數據庫添加一條新的記錄。這里用到了幾個類:LDAPEntry、LDAPAttribute和LDAPAttributeSet。首先建立一個LDAPAttributeSet,然后建立各種的LDAPAttribute,把他們add到LDAPAttributeSet中。然后建立一個LDAPEntry。其構造函數有兩個參數,一個是這個LDAPEntry的DN,一個是他的屬性集合,也就是LDAPAttributeSet。
             最后,調用LDAPConnection實例化對象的add方法,把實體添加到服務器中。然后別忘了斷開連接喔。整體的示例代碼如下:
          java 代碼
          LDAPAttributeSet attributeSet = new LDAPAttributeSet();   
                 attributeSet.add(new LDAPAttribute("objectclass", new String(   
                         "inetOrgPerson")));   
                 attributeSet.add(new LDAPAttribute("cn", new String[] { "李",   
                         "Jim Smith", "Jimmy Smith" }));   
                 attributeSet.add(new LDAPAttribute("givenname", new String[] { "測試",   
                         "Jim", "Jimmy" }));   
                 attributeSet.add(new LDAPAttribute("sn", new String("Smith")));   
                 attributeSet.add(new LDAPAttribute("telephonenumber", new String(   
                         "1 801 555 1212")));   
                 attributeSet.add(new LDAPAttribute("mail",   
                         new String("JSmith@Acme.com")));   
                 attributeSet.add(new LDAPAttribute("userpassword", new String(   
                         "newpassword")));   
                 LDAPEntry entry = new LDAPEntry("cn=李,cn=Lizl,dc=excel,dc=com,dc=cn",   
                         attributeSet);   
                 LDAPConnection con = new LDAPConnection();   
                 con.connect("6.1.19.154", 389);   
                 con.bind(LDAPConnection.LDAP_V3, "cn=XXX", "XXXXXX");   
                 con.add(entry);   
                 System.out.println("成功的添加了一條記錄!");   
                 con.disconnect();  
           

          10:27  |   永久鏈接  |   瀏覽 (1217)  |   評論 (3)  |    收藏  |   ldap  |   進入論壇  |    

          永久鏈接
          http://junewolf.javaeye.com/blog/52088 

          評論    共 3 條  發表評論 

          Hejrcc     2007-06-14 21:20
          我覺得樓主的代碼很不好看啊,不要這么短就換行嘛。。。
          還有, Indentation size = 4 就好了, 干嘛搞成8個字符這么寬啊,你這個代碼, 第2行好像不用空字符吧?


          代碼
          LDAPAttributeSet attributeSet = new LDAPAttributeSet();  
          attributeSet.add(new LDAPAttribute("objectclass", new String("inetOrgPerson")));  
          attributeSet.add(new LDAPAttribute("cn", new String[] { "李", "Jim Smith", "Jimmy Smith" }));  
          attributeSet.add(new LDAPAttribute("givenname", new String[] { "測試", "Jim", "Jimmy" }));  
          attributeSet.add(new LDAPAttribute("sn", new String("Smith")));  
          attributeSet.add(new LDAPAttribute("telephonenumber", new String("1 801 555 1212")));  
          attributeSet.add(new LDAPAttribute("mail", new String("JSmith@Acme.com")));  
          attributeSet.add(new LDAPAttribute("userpassword", new String("newpassword")));  
          LDAPEntry entry = new LDAPEntry("cn=李,cn=Lizl,dc=excel,dc=com,dc=cn", attributeSet);  
          LDAPConnection con = new LDAPConnection();  
          con.connect("6.1.19.154", 389);  
          con.bind(LDAPConnection.LDAP_V3, "cn=XXX", "XXXXXX");  
          con.add(entry);  
          System.out.println("成功的添加了一條記錄!");  
          con.disconnect(); 
           

          用JAVA實現LDAP的訪問(四)
          關鍵字:   用JAVA實現LDAP的訪問(四)    
          這里來說一說怎么從LDAP中刪除一個實體。
          首先,連接LDAP服務器,然后通過DN來刪除一個實體。
          示例代碼如下:
          java 代碼
          LDAPConnection con = new LDAPConnection();   
          con.connect("6.1.19.154",389);   
          con.bind(LDAPConnection.LDAP_V3,"cn=XXXX","XXXXXX");   
          con.delete("cn=JSmith,dc=excel,dc=com,dc=cn");   
          System.out.println("成功刪除一條記錄!");   

          ITDS的infoCenter的地址
          關鍵字:   ITDS的infoCenter的地址    
          ITDS的infoCenter的地址:
          http://publib.boulder.ibm.com/infocenter/tivihelp/v2r1/index.jsp?toc=/com.ibm.IBMDS.doc/toc.xml
           
          可以通過ITDS的WEB管理工具對LDAP進行管理,包括條目管理和objectclass以及
          attributes的管理。
          啟動ITDS的WEB控制臺的方法是打開cmd,
          在D:\Program Files\IBM\LDAP\appsrv\bin文件夾下面(并不一定是這個路徑,看安裝時的位置,但\IBM\LDAP\appsrv\bin一般情況下不會變。)
          輸入startServer server1。
           
          訪問Web控制臺的URL是:
          http://6.1.9.54:9080/IDSWebApp/IDSjsp/IDSConsoleFrameWork.jsp

          Ldap 的 Schema 中 的 objectclass 和 attributes 詳解
          關鍵字:   Ldap 的 Schema 中 的 objectclass 和 attributes 詳解    
          地址是:
          http://www-03.ibm.com/servers/eserver/iseries/ldap/schema/

          posted on 2007-07-13 11:00 蘆葦 閱讀(19348) 評論(1)  編輯  收藏 所屬分類: 數據庫JAVA

          Feedback

          # re: 用JAVA實現LDAP的訪問 2013-06-05 10:10 www.dsprint.cn
          不錯  回復  更多評論
            

          主站蜘蛛池模板: 房山区| 大悟县| 西昌市| 南康市| 滕州市| 抚顺县| 武乡县| 惠水县| 高碑店市| 彰化市| 大新县| 墨玉县| 奈曼旗| 蒙阴县| 通海县| 汶川县| 南岸区| 济源市| 安阳县| 芦溪县| 奉化市| 旬阳县| 许昌县| 宽甸| 巫溪县| 仙居县| 丰都县| 河南省| 哈密市| 郸城县| 方正县| 绿春县| 西乌珠穆沁旗| 四平市| 邛崃市| 鄯善县| 安平县| 乌兰察布市| 白玉县| 鹤山市| 镇雄县|