java同步ldap實例


1.准備過程

1.1  在windows server 2008 R2操作系統下搭建AD域,不懂得看鏈接地址:http://99532720.blog.51cto.com/2194488/696611

1.2.  可以使用LDAP客戶端(Apache Directory Studio) 直接連接AD域,下載地址 http://directory.apache.org/studio/ 
  

1.3.  java語句要用到的jar包,下載地址:https://sourceforge.net/projects/ldap-sdk/

2.java操作過程(我這里只做同步查詢,負責查詢ldap數據,然后同步到我的數據庫)

2.1  定義參數

 

  1. // 當前配置信息  
  2. private static String ldapHost = "172.16.160.196";  
  3. private static int ldapPort = 389;  //默認端口
  4. private static String ldapBindDN = "cn=zhangsan,rou=銷售部一,ou=銷售部,ou=哇哈哈公司,dc=tian,dc=com";
  5. private static String ldapPassword = "******";  //張三的密碼
  6. private static LDAPConnection connection = null;  

  dc就是你搭建AD域的時候創建的域名,就是如圖

 

ldapBindDN的值:cn=zhangsan,rou=銷售部一,ou=銷售部,ou=哇哈哈公司,dc=tian,dc=com

這里的zhangsan是名字為張三的賬號

 

2.1  創建Ldap連接

    

/** 連接LDAP */
public static void openConnection() {
  if (connection == null) {
    try {
      connection = new LDAPConnection(ldapHost, ldapPort, ldapBindDN, ldapPassword);
      System.out.println("連接成功!");
    } catch (Exception e) {
    System.out.println("連接LDAP出現錯誤:\n" + e.getMessage());
    }
  }
}

2.2  先查詢出來ldap數據

  1. /** 查詢 */  
  2. public static void queryLdap(String searchDN, String filter) {  
  3.     try {  
  4.         // 連接LDAP  
  5.         openConnection();  
  6.           
  7.         // 查詢企業所有用戶  
  8.         SearchRequest searchRequest = new SearchRequest(searchDN, SearchScope.SUB, "(" + filter + ")");  
  9.         searchRequest.addControl(new SubentriesRequestControl());  
  10.         SearchResult searchResult = connection.search(searchRequest);  
  11.         System.out.println(">>>共查詢到" + searchResult.getSearchEntries().size() + "條記錄");  
  12.         int index = 1;  
  13.         for (SearchResultEntry entry : searchResult.getSearchEntries()) {  
  14.             System.out.println((index++) + "\t" + entry.getDN());  
  15.         }  
  16.     } catch (Exception e) {  
  17.         System.out.println("查詢錯誤,錯誤信息如下:\n" + e.getMessage());  
  18.     }  
  19. }  

2.2  測試

  1. public static void main(String[] args) {  
  2.     String searchBase="ou=銷售部,ou=哇哈哈公司,dc=tian,dc=com";
  3.     String filter = "objectClass=organizationalUnit";  //這是查詢所有部門的
  4.    //objectClass=person這是查詢所有用戶的,objectClass=group這是查詢部門下所有的討論組的,objectClass=*這是查詢所有
  5.     queryLdap(searchBase, filter);  
  6. }  

2.3  貼一點同步用戶用到的地方

  保存用戶的類根據具體情況自己設置屬性

/** 先從ldap里查詢 然后同步用戶到數據庫用的*/
public void queryLdap(String searchDN, String filter) {
try {
// 連接LDAP
openConnection();

// 查詢企業所有用戶
SearchRequest searchRequest = new SearchRequest(searchDN, SearchScope.SUB, "(" + filter + ")");
searchRequest.addControl(new SubentriesRequestControl());
SearchResult searchResult = connection.search(searchRequest);
System.out.println(">>>共查詢到" + searchResult.getSearchEntries().size() + "條記錄");
int index = 1;
Connection con=null;
UserDate user=null;
con=dbUtil.getCon();
for (SearchResultEntry entry : searchResult.getSearchEntries()) {

System.out.println((index++) + "\t" + entry.getDN());
System.out.println(entry.toString());

//遍歷entry,獲取有效數據
Collection<Attribute> ca=entry.getAttributes();
Iterator<Attribute> itr=ca.iterator();
user=new UserDate();
String uuid = UUID.randomUUID().toString();
user.setId(uuid);
user.setAccountType(0);
Date date=new Date();
user.setCreateTime(date);
while(itr.hasNext()){
Attribute ab=itr.next();
String name=ab.getName();
/*String value=ab.getValue();
System.out.println("=="+value);
System.out.println("--"+name);*/
if(name.equals("sAMAccountName")){ //用戶登錄名
user.setAccount(ab.getValue());
}
if(name.equals("mail")){ //電子郵件
user.setEmail(ab.getValue());
}
if(name.equals("mobile")){ //手機號
user.setMobile(ab.getValue());
}
if(name.equals("displayName")){ //姓名
user.setName(ab.getValue());
}
if(name.equals("postalCode")){
user.setZipCode(ab.getValue());
}
if(name.equals("l")){//市
user.setLocationAddress(ab.getValue());
}
if(name.equals("st")){//省
String address1=user.getLocationAddress();
user.setLocationAddress(ab.getValue()+address1);
}
if(name.equals("co")){//國家
String address2=user.getLocationAddress();
user.setLocationAddress(ab.getValue()+address2);
}
if(name.equals("streetAddress")){//街道
String address2=user.getLocationAddress();
user.setLocationAddress(address2+ab.getValue());
}

}
System.out.println("用戶信息:"+user);
int result=userDao.saveUser(con, user);
if(result>0){
System.out.println("保存用戶成功!");
}else{
System.out.println("保存用戶失敗!");
}


System.out.println("*******************************");
}
} catch (Exception e) {
System.out.println("查詢錯誤,錯誤信息如下:\n" + e.getMessage());
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM