用java显示LDAP Entry Tree

 

/
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author
 */
public class Search {

 private DirContext dc = null;

 private JFrame jframe = null;

 private Hashtable existNodes = new Hashtable();

 private String url = "";

 private String loginName = "";

 private String password = "";

 private String base = "";

 private String filter = "";

 public Search(String url, String loginName, String password, String base,
   String filter) {
  this.url = url;
  this.loginName = loginName;
  this.password = password;
  this.base = base;
  this.filter = filter;
  display();
 }

//连接LDAP

public void getConnection() {
  try {
   Hashtable env = new Hashtable();
   env.put(Context.SECURITY_PRINCIPAL, loginName);
   env.put(Context.SECURITY_CREDENTIALS, password);
   env.put(Context.INITIAL_CONTEXT_FACTORY,
     "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, url);
   dc = new InitialDirContext(env);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

//取得每一个Entry的DN

 public ArrayList getDN() {
         ArrayList list = new ArrayList();
         try {
             getConnection();
             SearchControls constraints = new SearchControls();
             constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
             NamingEnumeration results = dc.search(base, filter, constraints);
             while (results != null && results.hasMore()) {

  SearchResult si = (SearchResult) results.next();
                 list.add(si.getNameInNamespace());
            
             }
         } catch (NamingException ex) {
        
         }
         return list;
     }
 

 private String getCreatedDn(String[] str, int i, int j) {
  if (i < 0 | i > str.length | j > str.length | j < 0 | i > j) {
   return null;
  }
  String ret = str[i];
  int k = i + 1;
  while (k < j - 1) {
   ret += "," + str[k];
   k++;
  }
  return ret;
 }

//建树

 public JTree buildTree() {
  JTree jtree = null;
  ArrayList dnList = getDN();
  Iterator it = dnList.iterator();
  DefaultMutableTreeNode root = new DefaultMutableTreeNode(base);
  int baseLenth = base.split(",").length + 1;
  System.out.println(baseLenth);
  while (it.hasNext()) {
   String dnStr = (String) it.next();
   String[] nodes = dnStr.split(",");
   int j = nodes.length;  
   int k = j - baseLenth;
  
   DefaultMutableTreeNode a = root;
   for (int i = k; i >= 0; i--) {
    String nodeDN = getCreatedDn(nodes, i, k);
    //System.out.println(nodeDN);
    if (existNodes.containsKey(new String(nodeDN))) {
     a = (DefaultMutableTreeNode) existNodes.get(new String(
       nodeDN));
     continue;
    }
    DefaultMutableTreeNode b = new DefaultMutableTreeNode(nodes[i]);
    existNodes.put(new String(nodeDN), b);
    a.add(b);
    a = b;
   }
   a = null;
  }
  existNodes = null;
  jtree = new JTree(root);
  return jtree;
 }

//显示

 public void display() {
  jframe = new JFrame("buildTree");
  Container container = jframe.getContentPane();

  JTree jtree = buildTree();
  JScrollPane scrollPane = new JScrollPane();
  scrollPane.setViewportView(jtree);

  container.add(scrollPane);

  jframe.pack();
  jframe.setVisible(true);
  jframe.addWindowListener(new WindowAdapter() {

   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
 }

 public static void main(String[] args) {
    new Search("ldap://localhost:389", "User DN",
    "Password", "Base DN",
    "(ObjectClass=*)");
 }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值