此Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明,了解有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
DirContext 接口包含了用于修改目录中对象的属性和属性值的方法。
一种修改对象属性的方法是提供一个修改请求列表 ( ModificationItem). 每个 ModificationItem 包含一个数字常量,指示要进行的修改类型,以及描述要进行的修改的 Attribute。以下是三种修改类型:
修改按照它们在列表中出现的顺序进行应用。要么执行所有修改,要么都不执行。
下面的代码创建了一个修改列表。它将 "mail" 属性的值替换为 "geisel@wizards.com",向 "telephonenumber" 属性添加一个额外的值,并移除 "jpegphoto" 属性。
// 指定要进行的修改 ModificationItem[] mods = new ModificationItem[3]; // 用新值替换 "mail" 属性 mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail", "geisel@wizards.com")); // 向 "telephonenumber" 添加一个额外的值 mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("telephonenumber", "+1 555 555 5555")); // 移除 "jpegphoto" 属性 mods[2] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("jpegphoto"));
Windows Active Directory: Active Directory 将 "telephonenumber" 定义为单值属性,与 RFC 2256 相反。要使此示例针对 Active Directory 正常工作,您必须使用除 "telephonenumber" 以外的属性,或将 DirContext.ADD_ATTRIBUTE 更改为 DirContext.REPLACE_ATTRIBUTE。
创建修改列表后,您可以将其提供给 modifyAttributes() 方法,如下所示。
// 在指定对象上执行请求的修改 ctx.modifyAttributes(name, mods);
另外,你也可以通过指定修改的类型和要应用修改的属性来进行修改。
例如,下面的代码将用orig中的属性替换与name相关联的属性:
ctx.modifyAttributes(name, DirContext.REPLACE_ATTRIBUTE, orig);
name的其他属性保持不变。
modifyAttributes()的这两种用法在示例程序
中进行了演示。该程序使用修改列表修改属性,然后使用modifyAttributes()的第二种形式恢复原始属性。