📄 ldapbean.java
字号:
package bean;
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 String search( String s ){
String str="";
try{
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
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();){//获得一个属性中的所有属性值
str+="\t\t"+attrId + ": ";
Object o = vals.nextElement();//下一属性值
if(o instanceof byte[]){
System.out.println(new String((byte[])o));
str+=(new String((byte[])o));
str+="\n\n";
}
else{
str+=o;
str+="\n\n";
}
}
}
}
}
else{
System.out.println(obj);
}
System.out.println();
}
}catch(Exception e){
System.out.println("Exception in search():"+e);
}
return str;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -