⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.java

📁 简单的操作ldap的管理系统
💻 JAVA
字号:
/*
 * 创建日期 2007-4-23
 *
 * 更改所生成文件模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
package ldap;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Enumeration;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls ;
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchResult;
import javax.naming.directory.Attributes ;
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.ModificationItem;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.naming.*;

import mypack.DeviceMeta;



/**
 * @author qzj
 *
 * 更改所生成类型注释的模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
public class test {
	public static String	MY_SEARCHBASE="ou=01,ou=Test1,ou=MetaEntities, o=MetaSubTree";
	//public static String MY_FILTER="(generalLocalldentifier=NA20041030PMAAAA0000000000)";
	public static String MY_FILTER="(flag=0)";//查询的属性
	DirContext ctx = null;
	int n=0;//记录条目数
	public String a1;
	public String a2;
	public String a3;
	public String a4;
	public String a5;
	public String a6;
	public String a7;
	public String a8;
	public String a9;
	public String a10;
	public String a11;
	
	public void init(){
			String account="orcladmin";//操作LDAP的帐户。默认就是Admin。
			String password="welcome";//帐户Admin的密码。
			//String root="(ou=11),ou=NatureContainer, ou=MetaEntities, o=MetaSubTree"; //所操作的WLS域。也就是LDAP的根节点的DC
			Hashtable env = new Hashtable();
			env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");//必须这样写,无论用什么LDAP服务器。
			env.put(Context.PROVIDER_URL, "ldap://210.25.133.32:4032/");//LDAP服务器的地址:端口。对WLS端口就是7001
		   	env.put(Context.SECURITY_AUTHENTICATION, "simple");//授权界别,可以有三种授权级别,但是如果设为另外两种都无法登录,我也不知道为啥,但是只能设成这个值"none"。
		    env.put(Context.SECURITY_PRINCIPAL, "cn=" + account );//载入登陆帐户和登录密码
			env.put(Context.SECURITY_CREDENTIALS, password);
			try{
				ctx = new InitialDirContext(env);//初始化上下文
				System.out.println("认证成功");//这里可以改成异常抛出。
			}catch(javax.naming.AuthenticationException e){
				System.out.println("认证失败");
			}catch(Exception e){
				System.out.println("认证出错:"+e);
			}
	 }
	 
	public void close(){
			if(ctx != null)
			{
				try
				{
					ctx.close();
					System.out.println("成功关闭");
				}
				catch (NamingException e)
				{
					System.out.println("NamingException in close():"+e);
				}
			}    
		}
	 
	public static void  main(String[]args)
	{
		test tt=new test();
		tt.init();
	tt.search();
		//tt.add();//可用
		//tt.edit();//可用
		//tt.delete("汽车","01");//可用
		
		 tt.close();

		for(int i=0;i<tt.deviceData.length;i++)
		{
			System.out.println(tt.deviceData[i].getGTitle()+"	"+tt.deviceData[i].getGDescription());
		}
	}
////////////////////////////////////////////////////////////////////
  /*public void search(){//我只能按照某些属性查找节点,偶还不会怎么查找一个目录或按照更复杂的正则式查找特定节点/目录
	try{
	 SearchControls constraints = new SearchControls();
	 constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
	 System.out.print("what would you want to search:");
	 BufferedReader bd=new BufferedReader(new InputStreamReader(System.in));
	 String s=bd.readLine();
	 NamingEnumeration en = ctx.search("", "uid="+s, constraints); //要查询的UID。如果是*则可以查到所有UID的节点
	 if(en == null){
	  System.out.println("Have no NamingEnumeration.");
	 }
	 if(!en.hasMoreElements()){
	  System.out.println("Have no element.");
	 }
	 while (en != null && en.hasMoreElements()){//可以查出多个元素
		 Object obj = en.nextElement();
		 if(obj instanceof SearchResult){
			 SearchResult si = (SearchResult) obj;
			 System.out.println("\tname: " + si.getName());
			 Attributes attrs = si.getAttributes();
			 
			 if (attrs == null){
				 System.out.println("\tNo attributes");
			 }else{
				 for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements();){//获得该节点的所有属性
		 Attribute attr = (Attribute) ae.next();//下一属性
		 String attrId = attr.getID();//获得该属性的属性名
		 for (Enumeration vals = attr.getAll();vals.hasMoreElements();){//获得一个属性中的所有属性值
			 System.out.print("\t\t"+attrId + ": ");
			 Object o = vals.nextElement();//下一属性值
			 if(o instanceof byte[])
				 System.out.println(new String((byte[])o));
			 else
				 System.out.println(o);
		 }
				 }
			 }
		 }
		 else{
			 System.out.println(obj);
		 }
		 System.out.println();
	 }
	}catch(Exception e){
	 System.out.println("Exception in search():"+e);
	}
	  }
	  */
	  public DeviceMeta []deviceData;
	   
	 String[]AttributeDevice={
	 	"GTitle",
	 	"guridentifier"
	 };
    public void search(){
    	
    	
		
		ArrayList listofValue=new ArrayList();
    
    try {
		SearchControls constraints = new SearchControls();
		constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
        NamingEnumeration results=ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
        while(results!=null &&results.hasMore()){
//			java.util.ArrayList list = new ArrayList();
		String temp[]=new String[AttributeDevice.length];
        SearchResult sr=(SearchResult)results.next();
//        list.add(sr);
//        String dn=sr.getName()+","+MY_SEARCHBASE;
//        System.out.println("Distinguished name is"+dn);
        Attributes attrs=sr.getAttributes();
        for(int i=0;i<AttributeDevice.length;i++){
        	Attribute att=attrs.get(AttributeDevice[i]);
        	NamingEnumeration ne=att.getAll();
        	temp[i]=new String();
        	while(ne.hasMoreElements())
        		temp[i]+=(ne.nextElement()+" ");
//				list.add((String)(ne.nextElement()+" "));
        	
        
        }
			listofValue.add(temp);
        }
        deviceData=new DeviceMeta[listofValue.size()];
        for(int j=0;j<deviceData.length;j++){
//        	deviceData[j].setGTitle()
			String[] t=(String[])listofValue.get(j);
			
			int k=0;
			deviceData[j]=new DeviceMeta();
			deviceData[j].setGTitle(t[k]);
			k++;
			deviceData[j].setGDescription(t[k]);
			
        }
        
      /*  for (NamingEnumeration ne=attrs.getAll();ne.hasMoreElements();){
        
        Attribute attr=(Attribute)ne.g;
        String attrID=attr.getID();
       
        System.out.println(attrID+":");
        for(Enumeration vals=attr.getAll();vals.hasMoreElements();){
        	
        	System.out.println("\t"+vals.nextElement());
        	DeviceMeta dm=new DeviceMeta();
        
        }
        
		
        }
        */
        n++;//每次返回记录计数器都加一
       
        }
        
//        System.out.println("共计返回"+n+"条记录");
		//list.size();
//		System.out.println("测试a1为"+a1);
		/*for(){
			deviceData[i]=new DeviceMeta();
			list.get(i)
			id;
			name;
			deviceData[i].setGTitle(name)
			
		}*/
    
//    }
	catch(Exception e){
		 e.printStackTrace();
		 System.exit(1);
				      }
    
    
    }
    
    
    public void add(){
    	try{
    	
    	String dn="ou=11,ou=NatureContainer,ou=MetaEntities, o=MetaSubTree";//制定新条目的 DN
    	String newUserName="qinzhijing";
    	BasicAttributes attrs =new BasicAttributes();
    	BasicAttribute objclassSet=new BasicAttribute("objectclass");
    	objclassSet.add("person");
		objclassSet.add("top");
		//objclassSet.add("gtype");
		objclassSet.add("inetOrgPerson");//这是个母类,添加子类时一定要先加母类
		objclassSet.add("scientificDataObject");
		objclassSet.add("test1");
		attrs.put(objclassSet);
		attrs.put("sn",newUserName);
		attrs.put("uid",newUserName);
		attrs.put("cn",newUserName);
		
		attrs.put("GTitle","sdsd");
		attrs.put("generalLocalIdentifier","testNA20041030PMAAAA0000000001");
		attrs.put("gtype","0010");
		attrs.put("GTaxonomy","11");
		attrs.put("GDescription","wewewewe");
		attrs.put("GAggregation","wdsdsdsd");
		attrs.put("MetaCreator","sdsdsds");
		attrs.put("MetaConformsTo","sdsdsdsd");
		attrs.put("MetaVersion","sdsdsd");
		attrs.put("givenname","衡阳市南岳区政府");
		attrs.put("flag","0");
		attrs.put("OrgName","");
		attrs.put("OrgAddressIdentifier","");
		   
		
		
		ctx.createSubcontext("uid="+newUserName+", ou=11,ou=NatureContainer,ou=MetaEntities, o=MetaSubTree", attrs);
    	    }
    	catch (Exception e){
    		System.out.println("Exception in add():"+e);
    	}
    	
    
    	
    	
    }
      
public void edit(){///暂不用
	try{
  String account = "计算机";//修改以前旧的值
  String flag1="1";
  String flag0 = "0";//修改以后新的值
  ModificationItem modificationItem[] = new ModificationItem[1];
  modificationItem[0] =
   new ModificationItem(
	DirContext.REPLACE_ATTRIBUTE,
	new BasicAttribute("flag", flag0));//所修改的属性
 // ctx.modifyAttributes("uid=" + account, modificationItem);    //执行修改操作
 ctx.modifyAttributes("GTitle=" + account+",ou=01,ou=DeviceContainer,ou=MetaEntities, o=MetaSubTree", modificationItem);    //执行修改操作
 }catch(Exception e){
  System.out.println("Exception in edit():"+e);
 }
   }

public void delete(String uid,String  ou){
	 try{
  // String uid = "stella";
   ctx.destroySubcontext("GTitle=" + uid+",ou="+ou+",ou=DeviceContainer,ou=MetaEntities, o=MetaSubTree");  //按照UID删除某个节点。我还不会删除一个目录。
   }catch(Exception e){
	System.out.println("Exception in edit():"+e);
   }
	}


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -