ldap是可以通过java控制增删查改么?

如题,刚接触ldap,如果有,求代码实例或连接!谢谢... 如题,刚接触ldap,如果有,求代码实例或连接!谢谢 展开
 我来答
815916yu
2012-05-15 · TA获得超过200个赞
知道答主
回答量:86
采纳率:0%
帮助的人:26.7万
展开全部
可以的。
static DirContext dc = null;
static String username = "Manager";
static String password = "admin";
Map m = new HashMap();

public TestLdap() {
getDC();
// add();
}

// 获取连接
public static InitialDirContext getDC() {
Hashtable env = new Hashtable();
DirContext d = null;
// 连接工厂
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://自己的IP:389/");
// 设定安全模式为simple
env.put(Context.SECURITY_AUTHENTICATION, "simple");
// 用户名
env.put(Context.SECURITY_PRINCIPAL, "cn=" + username + "," + "dc=root");
// 密码
env.put(Context.SECURITY_CREDENTIALS, password);
try {
d = new InitialDirContext(env);
System.out.print("连接成功!");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (InitialDirContext) d;
}

// 关闭
public void close() {
if (dc != null) {
try {
dc.close();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

// 添加
public static boolean add(DirContext dc) {
boolean result = true;
String name = "zhangsan";
BasicAttributes attrs = new BasicAttributes();
BasicAttribute attr = new BasicAttribute("objectclass");
attr.add("organization");
attrs.put(attr);
attrs.put("o", name);
try {
dc.createSubcontext("o=" + name + ",o=zhangsan,o=person,dc=root",
attrs);
} catch (NamingException e) {
e.printStackTrace();
result = false;
}
return result;
}

// 删除
public static boolean delete(DirContext dc, String d) {
boolean result = true;
try {
dc.destroySubcontext(d);
System.out.println("删除成功!");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = false;
}
return result;

}

/*
* 修改 @param base的取值来判断需要执行哪个方法 @param atr属性名称 @param value属性值
*
*
*/
public static boolean modifytest(DirContext dc, String dn, String base,
String atr, String value) {
boolean result = true;
ModificationItem[] item = new ModificationItem[1];
try {
if ("add".equals(base)) {
// 没有这个属性,添加这个属性
Attribute atr1 = new BasicAttribute(atr, value);
item[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, atr1);
} else if ("modify".equals(base)) {
// 修改原有属性(如果有此属性,修改属性的值,如没有添加此属性)
Attribute atr1 = new BasicAttribute(atr, value);
item[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
atr1);
} else {
// 移除此属性(属性值需和ldap中的一样)
Attribute atr2 = new BasicAttribute(atr, value);
item[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
atr2);
}

dc.modifyAttributes(dn, item);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = false;
}
return result;
}

/**
* 搜索,查询
*
* @param base
* :根节点(在这里是“dc=root”)
* @param scope
* :搜索范围,分为“base”(本节点),“one”(单层),“”{遍历}
* @param filter
* :指定子节点(格式为“(objectclass=)”)“,*是指全部,你也可以指定某一特定类型的树节点
*/
public static List searchtest(DirContext dc, String base, String scope,
String filter) {
List list = new ArrayList();
SearchControls sc = new SearchControls();
if (scope.equals(base)) {
sc.setSearchScope(SearchControls.OBJECT_SCOPE);
} else if (scope.equals("one")) {
sc.setSearchScope(SearchControls.ONELEVEL_SCOPE);
} else {
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
}
NamingEnumeration na = null;
try {
na = dc.search(base, filter, sc);
// hasMore 确定枚举中是否有该元素
while (na.hasMore()) {
SearchResult sr = (SearchResult) na.next();
// String name=sr.getName();
// if(base!=null&&!base.equals(""))
// {
// System.out.println("entry:"+name+"."+base);
// }else
// {
// System.out.println("entry:"+name);
// }
Attributes as = sr.getAttributes();
NamingEnumeration na1 = as.getAll();
while (na1.hasMore()) {
Attribute at = (Attribute) na1.next();
String attype = at.getID();
NamingEnumeration na2 = at.getAll();
Vector v = new Vector();
while (na2.hasMore()) {
Object val = na2.nextElement();
list.add(val);
}
}
}
} catch (NamingException e) {
e.printStackTrace();
}
return list;
}
追问
需要像JDBC一样的驱动包么?我看引入了一些LDAP的包额 网上找不到啊
追答
不需要驱动包
env.put(Context.PROVIDER_URL, "ldap://自己的IP:389/");
连接ldap的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式