新人求助啊!(用戶密碼修改)
我建了個根o=tg,c=cn
rootDN是cn=admin,o=tg,c=cn
然後加了條數據dn為 uid=zhu,o=tg,c=cn
該條數據完整信息為:
dn: uid=zhu,o=tg,c=cn
uid: zhu
objectClass: inetOrgPerson
mail: fantasia@sina.com
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
labeledURI: http://unmi.blogcn.com
sn: xuan
cn: name
現在我用rootDN登陸后可以修改uid=zhu的記錄的密碼,但是用該用戶登陸后卻不能修改他自己的密碼,說許可權不夠。
我用的是默認的訪問控制:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
以下是錯誤信息:
LDAP Connected!
Error: NoPermission!
javax.naming.NoPermissionException: ; remaining name 'uid=zhu'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3013)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2951)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2758)
at com.sun.jndi.ldap.LdapCtx.c_modifyAttributes(LdapCtx.java:1441)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_modifyAttributes(ComponentDirContext.java:255)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:172)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:161)
at javax.naming.directory.InitialDirContext.modifyAttributes(InitialDirContext.java:148)
at ldap.LDAP_Operating.LDAP_ModifyItem(LDAP_Operating.java:139)
at ldap.LDAP_Operating.main(LDAP_Operating.java:176)
LDAP Connection Closed!
以下是我用的連接ldap的代碼:
_TbaleEevent = new Hashtable<String, String>();
_TbaleEevent.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
_TbaleEevent.put(Context.PROVIDER_URL, _LdapUrl + _LdapRoot);
_TbaleEevent.put(Context.SECURITY_AUTHENTICATION, "simple");//simple none
_TbaleEevent.put(Context.SECURITY_PRINCIPAL, "uid=" + _UserName + "," + _LdapRoot);
_TbaleEevent.put(Context.SECURITY_CREDENTIALS, _PassWord);
ps:_LdapRoot="o=tg,c=cn"
_LdapUrl ="ldap://localhost:389/"
_UserName ="zhu"
以下是修改密碼的代碼:
public void LDAP_ModifyItem() {
ModificationItem modificationItem[] = new ModificationItem;
modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute("userPassword", "7895"));
try {
ctx.modifyAttributes("uid=zhu", modificationItem);
} catch (javax.naming.NoPermissionException e) {
System.out.println("Error: NoPermission!");
e.printStackTrace();
} catch (NamingException e2) {
e2.printStackTrace();
}
}
希望知道解決辦法的朋友幫幫我,謝謝了。
[ 本帖最後由 9i00 於 2007-11-9 16:33 編輯 ]
《解決方案》
需要正確配置訪問控制列表,參考一下偶的這篇文章。
http://zh.linuxvirtualserver.org/node/385
而且要看一下後面的留言。