ldap java 对象 存储_java - 修改UID在LDAP存储库 - SO中文参考 - www.soinside.com

本文讨论了一个使用LdapTemplate更新LDAP库中用户信息的应用程序遇到的问题。当用户更改其电子邮件地址时,应用程序需要更新用户的UID。文章详细介绍了当前的实现方式,并提出了一种错误的情况,即在尝试更新时会收到一个特定的LDAP错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我使用LdapTemplate对LDAP库开发应用程序的春天启动了获取用户信息。

我使用的用户电子邮件作为UID,当用户更新他的电子邮件,我必须得更新自己的UID。问题是,下面的工作方法,对所有的人域而不是UID。我得到一个错误:

LDAP: error code 64 - value of naming attribute 'uid' is not present in entry

这是一个片段:

public void updateUser(Person p) throws InvalidNameException {

Name dn = buildDn(p);

DirContextOperations context = ldapTemplate.lookupContext(dn);

LdapMapper.mapToContext(p, context);

ldapTemplate.modifyAttributes(context);

}

BuildDn:

public Name buildDn(Person p) throws InvalidNameException {

List lstRdn = new ArrayList();

lstRdn.add(new Rdn("dc", "priv"));

lstRdn.add(new Rdn("dc", "com"));

lstRdn.add(new Rdn("ou", "customers"));

lstRdn.add(new Rdn("ou", "myusers");

lstRdn.add(new Rdn("uid", "oldUid"));

Name name = new LdapName(lstRdn);

return name;

}

映射器

public static void mapToContext(Person p, DirContextOperations context) {

context.setAttributeValues("objectclass", new String[] { "top", "person", "inetOrgPerson", "organizationalPerson" });

context.setAttributeValue("cn", p.getFirstName());

context.setAttributeValue("sn", p.getLastName());

context.setAttributeValue("mail", p.getEmail());

context.setAttributeValue("userPassword", p.getPassword());

context.setAttributeValue("uid", "NewUid");

}

你有什么想法来修复这个bug?

最好的祝福

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值