Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过JNDI更改LDAP密码_Java_Passwords_Ldap_Jndi - Fatal编程技术网

Java 如何通过JNDI更改LDAP密码

Java 如何通过JNDI更改LDAP密码,java,passwords,ldap,jndi,Java,Passwords,Ldap,Jndi,我试图通过JNDI更改用户的密码,但我得到了下面的错误 javax.naming.directory.SchemaViolationException:[LDAP:错误代码65-无法修改条目uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal,因为生成的条目会违反服务器架构:条目uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal违反目录服务器架构配置,因为它包含任何在该条目中定义的对象类] 下面是我的代码 publ

我试图通过JNDI更改用户的密码,但我得到了下面的错误

javax.naming.directory.SchemaViolationException:[LDAP:错误代码65-无法修改条目uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal,因为生成的条目会违反服务器架构:条目uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal违反目录服务器架构配置,因为它包含任何在该条目中定义的对象类]

下面是我的代码

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);
        }
    }
}
知道为什么吗?非常感谢


Kevin

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

需要改变

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


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

你能在答案后面附上一个示例代码吗?如果它是除AD以外的任何LDAP服务器:
attribute mod0=new BasicAttribute(“userPassword”,“a”);
如果它的AD:
attribute mod0=new BasicAttribute(“unicoded”,“a”);
Attribute mod0 = new BasicAttribute("userpassword", "a");