ldap增删改查

package test2;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Enumeration;

import java.util.Properties;

import javax.naming.NamingEnumeration;

import javax.naming.NamingException;

import javax.naming.directory.Attribute;

import javax.naming.directory.Attributes;

import javax.naming.directory.BasicAttribute;

import javax.naming.directory.BasicAttributes;

import javax.naming.directory.DirContext;

import javax.naming.directory.InitialDirContext;

import javax.naming.directory.ModificationItem;

import javax.naming.directory.SearchControls;

import javax.naming.directory.SearchResult;

public class Test {

public static DirContext dc; //相当于这个树的一个映像

public static void conn()

{

String dn="cn=Manager,dc=my-domain,dc=com"; //包括连接LDAP服务器的用户及要操作的根节点

Properties env = new Properties();

env.put(DirContext.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

env.put(DirContext.PROVIDER_URL, "ldap://localhost:" + 389);

if (dn != null) {

env.put(DirContext.SECURITY_PRINCIPAL, dn);

env.put(DirContext.SECURITY_CREDENTIALS, "secret");

}

try {

dc = new InitialDirContext(env);

System.out.println("连接成功");

} catch (NamingException e) {

e.printStackTrace();

}

}

public static void deleteInformation()

{

try {

dc.destroySubcontext("cn=mm,ou=ppeople,dc=my-domain,dc=com");

System.out.println("删除成功");

} catch (NamingException ne) {

ne.printStackTrace();

}

}

public static void addInformation()

{

try

{

Attributes attrs = new BasicAttributes();

attrs.put("uid", "alee");

attrs.put("sn","Lee");

attrs.put("telephoneNumber", "14085550017");

attrs.put("userPassword","redqueen".getBytes());

BasicAttribute objectclass = new BasicAttribute("objectclass");

objectclass.add("uidObject");

objectclass.add("person");

attrs.put(objectclass);

dc.createSubcontext("cn=mm,ou=ppeople,dc=my-domain,dc=com", attrs);

System.out.println("添加成功");

} catch (Exception ne) {

ne.printStackTrace();

System.out.println("添加失败");

}

}

public static void modifyInformation(String dn)

{

try {

ModificationItem[] mods = new ModificationItem[1];

mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("sn", "qm"));// 所修改的属性

dc.modifyAttributes(dn,mods);

System.out.println("修改成功");

} catch (NamingException ne) {

ne.printStackTrace();

}

}

public static 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 = dc.search("dc=my-domain,dc=com", "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) {

e.printStackTrace();

}

}

public static void main(String[] args) {

conn();

addInformation();

deleteInformation();

modifyInformation("uid=jdoe,ou=people,dc=my-domain,dc=com");

search();

try {

dc.close();

} catch (NamingException e) {

e.printStackTrace();

}

}

}

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值