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

📄 ldapbean.java

📁 它统一管理各个应用系统用户的身份验证
💻 JAVA
字号:
package ldap;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.util.concurrent.*;

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


public class LdapBean{	
	public static final String ENTRY_NAME = "uid=tiger,ou=academicAdmin,dc=ssdut,dc=edu";
	
	DirContext ctx = null;
	//public static final String ENTRY_NAME = "ou=academicAdmin,dc=ssdut,dc=edu";
	String account="manager";//操作LDAP的帐户,默认就是manager。
	String password="secret";//帐户manager的密码。
	String root="dc=ssdut,dc=edu"; 
	Hashtable env = new Hashtable();
	
	private ConcurrentMap<String, String> accounts=new ConcurrentHashMap<String, String>();
	public LdapBean()
	{
		init();
	}
	
	public void init(){		
		env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.PROVIDER_URL, "ldap://localhost:389/" + root);
		env.put(Context.SECURITY_AUTHENTICATION, "none");//授权级别
		env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root);//载入登陆帐户和登录密码
		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 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 ConcurrentMap getAccountsInfo()
	{
		String user = "";
		String password="";
		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));

			NamingEnumeration en = ctx.search("", "uid=*", 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();//获得该属性的属性名
							if("uid".equals(attrId)){								
								for (Enumeration vals = attr.getAll();vals.hasMoreElements();){//获得一个属性中的所有属性值
									Object o = vals.nextElement();//下一属性值	
									user=o.toString();	
									System.out.println(user+" 111 ");
								}
							}
							if("userPassword".equals(attrId)){								
								for (Enumeration vals = attr.getAll();vals.hasMoreElements();){//获得一个属性中的所有属性值
									Object o = vals.nextElement();//下一属性值	
									password= new String((byte[])o);								
								}
							}
							if(user!=""&& password!=""){
								System.out.println(user+" 111 "+password);
								accounts.put(user, password);
								user="";
								password="";
							}
						}
					}
				}
				else{
					System.out.println(obj);
				}
				System.out.println();
			}
		}catch(Exception e){
			System.out.println("Exception in search():"+e);
		}		
		return accounts;
	}
}

⌨️ 快捷键说明

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