📄 ldapbean.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 + -