转自:http://www.webasp.net/article/13/12722_print.htm
|
/* 1. 从LDAP服务器中提取常用名cn、可区分名字uid、密码userpassword、Email地址mail * 其中使用Netscape LDAP服务器作为测试环境,使用simple认证方式登录LDAP服务器。 * 2. 用命名‘admin’密码是‘1’,整个程序使用SDK1.4.1中的JNDI标准接口。 * 3. 为了配合DOMINO数据库开发,假设用户登录时候的IP地址已经记录在了字段uid中,并用‘,’隔开 * 程序最终将打印一个包括所有用户名,密码,IP地址的字符串。 * 4. 在处理分离用户名和IP地址的时候,引入了正则表达式的使用。 */ package mm;
//引入LDAP的包 import java.lang.*; import java.util.Hashtable; import java.util.Enumeration; import javax.naming.*; import javax.naming.directory.*; //import mm.splitString;
public class JNDISearch{ public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; //驱动 public static String MY_HOST = "ldap://localhost:389"; //主机地址和端口 public static String MY_SEARCHBASE = "o=airius.com"; //基点入口 public static String MY_FILTER = "(mail=west)"; //过滤条件 public static String MGR_DN="uid=admin,ou=Administrators,ou=TopologyManagement,o=NetscapeRoot"; //用户名 public static String MGR_PW="1"; //密码 public static String MY_ATTRS[] = {/*"cn","userpassword","mail",*/"cn"}; //StringBuffer res = new StringBuffer(); //用来输入名字,IP地址的对象 public static String temp = new String();
public String search() throws Exception{ StringBuffer res = new StringBuffer(); try{ //建立连接 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX); env.put(Context.PROVIDER_URL,MY_HOST); env.put(Context.SECURITY_AUTHENTICATION,"simple"); //使用简单认证来认证用户 env.put(Context.SECURITY_PRINCIPAL,MGR_DN); env.put(Context.SECURITY_CREDENTIALS,MGR_PW); DirContext ctx = new InitialDirContext(env);
//设置查询范围并开始查询 SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
//打印查询结果 while (results != null && results.hasMore()){ SearchResult sr = (SearchResult) results.next(); //String dn = sr.getName(); String dn = sr.getName()+","+MY_SEARCHBASE; System.out.println("=============================================="); System.out.println("Distinguished Name is: "+dn);
// 打印指定的字段////////////////////////////////////////////////////////////////// Attributes ar = ctx.getAttributes(dn,MY_ATTRS); if(ar==null) { //对应的uid没有多余的属性 System.out.println("Entry "+dn+" has none of the specified attributes\n"); } else { //开始显示对应的字段 for(int i=0;iAttribute attr = ar.get(MY_ATTRS[i]); if(attr!=null) { System.out.print(MY_ATTRS[i]+" : "); for(Enumeration vals = attr.getAll(); vals.hasMoreElements(); ) { temp = (String)vals.nextElement(); System.out.println("\t"+temp); res.append(temp+"/"); } } System.out.println("\n"); } ///////////////////////////////////////////////////////////////////////////////////
/* 打印全部的字段/////////////////////////////////////////////////////////////////// Attributes attrs = sr.getAttributes(); for(NamingEnumeration ne = attrs.getAll(); ne.hasMoreElements(); ){ Attribute attr = (Attribute) ne.next(); String attrID = attr.getID(); System.out.println(attrID+": "); for(Enumeration vals = attr.getAll();vals.hasMoreElements(); ){ System.out.println("\t"+vals.nextElement()); } *////////////////////////////////////////////////////////////////////////////////// } } }catch (Exception e){ e.printStackTrace(); System.exit(1); } System.out.println(res.toString()+"\n\n\n\n");
//splitString sp = new splitString(); //System.out.println("一共有"+sp.splitString(res.toString()).length+"个返回"); //打印显示结果,计算返回的数组值 //return sp.splitString(res.toString()); return res.toString();
}
/////////////////////////////////////////////////////////////////////////////////////////// // 使用正则表达式来分拣提取的字符串 /////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
} |
posted on 2005-10-27 16:30
my java 阅读(464)
评论(0) 编辑 收藏 所属分类:
JNDI