【问题标题】:How to change LDAP password via JNDI如何通过 JNDI 更改 LDAP 密码
【发布时间】:2011-05-22 14:12:23
【问题描述】:

我正在尝试通过 JNDI 更改用户密码,但出现以下错误。

javax.naming.directory.SchemaViolationException: [LDAP: 错误代码 65 - 条目 uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal 无法修改,因为生成的条目将违反服务器架构:条目uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal 违反了 Directory Server 架构配置,因为它包含该条目中定义的任何对象类都不允许的属性用户密码];

以下是我的代码。

public class ModifyAtt
{

    public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
    public static String MY_HOST = "ldap://KhooGP-Comp1:1389/dc=QuizPortal";
    public static String MGR_DN = "cn=Directory Manager";
    public static String MGR_PW = "password";

    public static void main(String[] args)
    {

        //Identify service provider to use
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);
        env.put(Context.PROVIDER_URL, MY_HOST);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, MGR_DN);
        env.put(Context.SECURITY_CREDENTIALS, MGR_PW);

        try
        {
            // Create the initial directory context
            InitialDirContext initialContext = new InitialDirContext(env);
            DirContext ctx = (DirContext)initialContext;

            System.out.println("Context Sucessfully Initialized");

            ModificationItem[] mods = new ModificationItem[1];

            Attribute mod0 = new BasicAttribute("user password", "a");

            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, mod0);

            ctx.modifyAttributes("uid=yiwei,ou=Administrator,o=SID", mods);

        }
        catch(Exception e)
        {
            System.err.println(e);
        }
    }
}

知道为什么吗?非常感谢提前..

凯文

【问题讨论】:

    标签: java passwords ldap jndi


    【解决方案1】:

    啊.. 用户密码不应该有空格。

    需要改变

    Attribute mod0 = new BasicAttribute("user password", "a");
    

    Attribute mod0 = new BasicAttribute("userpassword", "a");
    

    【讨论】:

      【解决方案2】:

      属性应该是一个没有空格的单词。

      【讨论】:

      • 你能发布一个附加到答案的示例代码吗?
      • 如果是除 AD 之外的任何 LDAP 服务器:Attribute mod0 = new BasicAttribute("userPassword", "a"); 如果其 AD:Attribute mod0 = new BasicAttribute("unicodePwd", "a");
      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 2015-09-11
      • 2018-11-15
      • 1970-01-01
      • 2020-02-29
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多