JNDI访问LDAP服务简单应用示例

来源:互联网 发布:小米笔记本pro 知乎 编辑:程序博客网 时间:2024/05/17 06:40

 package cn.com.ldap;

import java.util.Properties;

public class UserObject {
    public static final String FIRST_NAME = "1";
   
    public static final String LAST_NAME = "2";
   
    public static final String COMMON_NAME = "3";
   
    public static final String USER_ID = "4";
   
    public static final String PASSWORD = "5";
   
    public static final String EMAIL = "6";
   
    public static final String PHONE = "7";
   
    public static final String FAX = "8";
   
    private Properties pro ;
   
    /**
     * 创建用户时使用
     * @param firstName
     * @param lastName
     * @param commonName
     * @param userId
     */
    public UserObject(String firstName,String lastName,String commonName,String userId){
     pro = new Properties();
     pro.setProperty(FIRST_NAME,firstName);
     pro.setProperty(LAST_NAME, lastName);
     pro.setProperty(COMMON_NAME, commonName);
     pro.setProperty(USER_ID, userId);
    }
    /**
     * 修改用户时使用
     * @param userId
     */
    public UserObject(String userId){
     pro = new Properties();
     pro.setProperty(USER_ID, userId);
    }
   
    public void setFistname(String firstName){
     pro.setProperty(FIRST_NAME, firstName);
    }
   
    public void setLastname(String lastName){
     pro.setProperty(LAST_NAME, lastName);
    }
   
    public void setCommonName(String commonName){
     pro.setProperty(COMMON_NAME, commonName);
    }
   
    public void setEmail(String email){
     pro.setProperty(EMAIL, email);
    }
   
    public void setPhone(String phone){
     pro.setProperty(PHONE, phone);
    }
   
    public void setFax(String fax){
     pro.setProperty(FAX, fax);
    }
   
    public String getProperty(String propertyName){
     return pro.getProperty(propertyName);
    }
   
    public int propSize(){
     return pro.size();
    }
}

·····················································

package cn.com.ldap;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class TestLdap {
  private DirContext dirContext;
 
  private Hashtable servInfo;
 
  private static final String LDAP_URL = "ldap://150.18.31.25:389";//服务器地址
 
  private static final String LDAP_MANAGER_DN = "uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot";//管理员
 
  private static final String LDAP_MANAGER_PASSWORD = "gdltb417";//管理员密码
 
  private static final String CHECK_TYPE = "simple";//验证方式
 
  private static final String CONTEXT_FACTORY =  "com.sun.jndi.ldap.LdapCtxFactory";
 
  private static final String BASE_DN = "ou=People,dc=gdlt";
 
  public TestLdap() throws NamingException{
   setEnvironment();
   dirContext = new InitialDirContext(servInfo);
   createGroup();
  }
  /**
   * 设置登录到LDAP服务器的信息
   */
  private void setEnvironment(){
   servInfo = new Hashtable();
   servInfo.put(Context.INITIAL_CONTEXT_FACTORY,CONTEXT_FACTORY);
   servInfo.put(Context.PROVIDER_URL, LDAP_URL);
   servInfo.put(Context.SECURITY_AUTHENTICATION, CHECK_TYPE);
   servInfo.put(Context.SECURITY_PRINCIPAL,LDAP_MANAGER_DN);
   servInfo.put(Context.SECURITY_CREDENTIALS,LDAP_MANAGER_PASSWORD);
  }
  /**
   * 创建一个用于测试的用户组(当用户组不存在时创建)
   */
  private  void createGroup()throws NamingException{
   try{
      dirContext.getAttributes(BASE_DN); 
   }catch(NamingException e){
    Attribute objClass = new BasicAttribute("objectclass");
    objClass.add("top");
    objClass.add("groupofuniquenames");
   
    Attribute cn = new BasicAttribute("cn","student");
    Attributes atts = new BasicAttributes();
    atts.put(objClass);
    atts.put(cn);
    dirContext.bind(BASE_DN,null, atts);
    System.out.println("create group success!");
   } 
 }
  /**
   * 关闭连接
   */
  private void closeConnection(){
      try {
    dirContext.close();
   } catch (NamingException e) {
    e.printStackTrace();
   }
  }
  /**
   * 验证用户是否存在
   * @param uid
   * @return
   */
  private boolean isUserExist(String uid){
   try {
   Attributes att = findUser(uid);
   if(att != null){
    return true;
   }else{
    return false;
   }
  } catch (NamingException e) {
   return false;
  }
  
  }
  /**
   * 查找用户
   * @param uid
   * @return
   * @throws NamingException
   */
  private Attributes findUser(String uid) throws NamingException{
   return dirContext.getAttributes("uid="+uid+","+BASE_DN);
  }
  /**
   * 设置属性
   * @param atts
   * @param attName
   * @param attValue
   */
  private void putAttribute(Attributes atts,String attName,String attValue){
   if(attValue != null && attValue.length() != 0){
      Attribute att = new BasicAttribute(attName,attValue);
      atts.put(att);
   }
  }
  /**
   * 获取属性
   * @param attrs
   * @param attrName
   * @return
   * @throws NamingException
   */
  private Object getAttribute(Attributes attrs,String attrName) throws NamingException{
          Attribute attr = attrs.get(attrName);
          if(attr == null){
           return "";
          }else{
           return attr.get();
          }
  }
  /**
   * 创建用户
   * @param userObject
   */
  public void createUser(UserObject userObject)throws NamingException{
   if(userObject == null){
    throw new NamingException("userObject is null");
   }
   String uid = userObject.getProperty(UserObject.USER_ID);
   if(uid == null || uid.equals("")){
    throw new NamingException("no uid info");
   }
   String firstName = userObject.getProperty(UserObject.FIRST_NAME);
   if(firstName == null || firstName.equals("")){
    throw new NamingException("no firstName info");
   }
   String lastName = userObject.getProperty(UserObject.LAST_NAME);
   if(lastName == null || lastName.equals("")){
    throw new NamingException("no lastNameinfo");
   }
   String commonName = userObject.getProperty(UserObject.COMMON_NAME);
   if(commonName == null || commonName.equals("")){
    throw new NamingException("no commonNameinfo");
   }
   String password = userObject.getProperty(UserObject.PASSWORD);
   String email = userObject.getProperty(UserObject.EMAIL);
   String phone = userObject.getProperty(UserObject.PHONE);
   String fax = userObject.getProperty(UserObject.FAX);
  
   Attributes attrs = new BasicAttributes();
   Attribute objclass = new BasicAttribute("objectclass");
   objclass.add("top");
         objclass.add("person");
         objclass.add("organizationalPerson");
         objclass.add("inetorgperson");
         attrs.put(objclass);
        
         putAttribute(attrs, "cn", commonName);
         putAttribute(attrs, "givenname", firstName);
         putAttribute(attrs, "sn", lastName);
         putAttribute(attrs, "uid", uid);
         putAttribute(attrs, "userpassword", password);
         putAttribute(attrs, "mail", email);
         putAttribute(attrs, "telephonenumber", phone);
         putAttribute(attrs, "facsimiletelephonenumber", fax);
        
         dirContext.bind("uid="+uid+","+BASE_DN, null, attrs);
         System.out.println("uid:"+uid+" is created");

  }
  /**
   * 修改用户信息
   * @param userObject
   * @throws NamingException
   */
  public void modifyUser(UserObject userObject)throws NamingException{
     if(userObject == null ){
      throw new NamingException("userObject is null");
     }
     String uid = userObject.getProperty(UserObject.USER_ID);
     if(uid == null || uid.equals("")){
      throw new NamingException("no uid info");
     }
     if(!isUserExist(uid)){
      throw new NamingException("uid:"+uid+"does not exist");
     }
     int size = userObject.propSize();//如果属性个数只有一个,那么只设置了uid,不用修改用户属性
     if(size > 1){
      String firstName = userObject.getProperty(UserObject.FIRST_NAME);
      String lastName = userObject.getProperty(UserObject.LAST_NAME);
      String commonName = userObject.getProperty(UserObject.COMMON_NAME);
      String email = userObject.getProperty(UserObject.EMAIL);
      String password = userObject.getProperty(UserObject.PASSWORD);
      String phone = userObject.getProperty(UserObject.PHONE);
      String fax = userObject.getProperty(UserObject.FAX);
     
      //设置属性
               Attributes attrs = new BasicAttributes();
               putAttribute(attrs, "cn", commonName);
               putAttribute(attrs, "givenname", firstName);
               putAttribute(attrs, "sn", lastName);
               putAttribute(attrs, "userpassword", password);
               putAttribute(attrs, "mail", email);
               putAttribute(attrs, "telephonenumber", phone);
               putAttribute(attrs, "facsimiletelephonenumber", fax);
              
               dirContext.modifyAttributes("uid="+uid+","+BASE_DN,DirContext.REPLACE_ATTRIBUTE,attrs);
               System.out.println("user (uid:"+uid+") is modified");
     }else{
      throw new NamingException("no info modified");
     }
  }
  /**
   * 删除用户
   * @param uid
   */
  public void deleteUser (String uid)throws NamingException{
   if(!isUserExist(uid)){
    throw new NamingException("user (uid:"+uid+") is not exist!");
   }
   dirContext.destroySubcontext("uid="+uid+","+BASE_DN);
   System.out.println("user (uid:"+uid+") is deleted!");
  }
  /**
   * 根据uid查询信息
   * @param uid
   * @throws NamingException
   */
  public void selectUser(String uid)throws NamingException{
   Attributes attrs;
   System.out.println("select user(uid:"+uid+")````");
    try {
              attrs = findUser(uid);
              System.out.println("-----------------------------");
              System.out.println("User(uid: " + uid + ") listing...");
             
              System.out.println("First Name: " +
                      getAttribute(attrs, "givenname"));
              System.out.println("Last Name: " +
                      getAttribute(attrs, "sn"));
              System.out.println("Common Name: " +
                      getAttribute(attrs, "cn"));
              System.out.println("password: " +
                      getAttribute(attrs, "userpassword"));
              System.out.println("User ID: " +
                      getAttribute(attrs, "uid"));
              System.out.println("E-Mail: " +
                      getAttribute(attrs, "mail"));
              System.out.println("Phone: " +
                      getAttribute(attrs, "telephonenumber"));
              System.out.println("Fax: " +
                      getAttribute(attrs, "facsimiletelephonenumber"));
              System.out.println("List completed.");
              System.out.println("-----------------------------n");
      } catch (NamingException ne) {
              throw new NamingException("The user(uid: " + uid
                      + ") is not exist!n");
      }
  }
 //提供一个存有多个用户信息的数组查询多个用户
     public void selectUser(String[] uid) {
             for (int i = 0; i < uid.length; i++) {
                     try {
                             selectUser(uid[i]);
                     } catch (NamingException ne) {
                             System.out.println(ne);
                             continue;
                     }
             }
     }
    
     protected void finalize() {
             closeConnection();
     }
}

························································································

package cn.com.ldap;

import javax.naming.NamingException;

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
//  UserObject user = new UserObject("张","三","张三","zhangsan");
//  UserObject user1 = new UserObject("李","四","李四","lisi");
  try {
   TestLdap tl = new TestLdap ();
//   tl.createUser(user);
//   tl.createUser(user1);
//   user.setEmail("ttttttttttttt");
//   user.setFax("aaaaaaaa");
//   tl.modifyUser(user);
   tl.selectUser("24401130100");
  } catch (NamingException e) {
   e.printStackTrace();
  }
 }

}
····································································

package cn.com.ldap;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;

public class MyLdapTest {

 /**
  * @param args
  * @throws NamingException
  */
 public static void main(String[] args) throws NamingException{
  Hashtable table1 = new Hashtable();
  table1.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
  table1.put(Context.PROVIDER_URL,"ldap://150.18.31.25:389");
  table1.put(Context.SECURITY_AUTHENTICATION,"simple");
  table1.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot");
  table1.put(Context.SECURITY_CREDENTIALS, "gdltb417");
  Hashtable table2 = new Hashtable();
  table2.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
  table2.put(Context.PROVIDER_URL,"ldap://localhost:39909");
  table2.put(Context.SECURITY_AUTHENTICATION,"simple");
  table2.put(Context.SECURITY_PRINCIPAL,"cn=Directory Manager");
  table2.put(Context.SECURITY_CREDENTIALS, "12345678");
  DirContext dirContext = new InitialDirContext(table1);
  BasicAttributes ba = new BasicAttributes();
  NamingEnumeration ne = dirContext.search("ou=People,dc=gdlt", ba);
        while(ne.hasMoreElements()){
         SearchResult result = (SearchResult)ne.nextElement();
         System.out.println(result.getName());
         Attributes attrs = result.getAttributes();
         NamingEnumeration enu = attrs.getAll();
         while(enu.hasMoreElements()){
          Attribute att = (Attribute)enu.nextElement();
          System.out.println("att.id:"+att.getID());
          for(int i = 0;i < att.size();i++){
           if(i >0){
            System.out.println(",");
           }else{
            System.out.println("-------"+att.get(i));
           }
          }
         }
        }
}
}

原创粉丝点击