Как изменить пароль LDAP через JNDI - PullRequest
6 голосов
/ 09 декабря 2010

Я пытаюсь изменить пароль пользователя через 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);
        }
    }
}

Есть идеи почему ??Большое спасибо заранее ..

Кевин

Ответы [ 2 ]

11 голосов
/ 09 декабря 2010

Ах ... между паролем пользователя не должно быть пробелов.

нужно изменить

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

до

Attribute mod0 = new BasicAttribute("userpassword", "a");
1 голос
/ 25 июня 2016

атрибут должен быть одним словом без пробела.

...