2015-06-24 3 views
2

У меня есть приложение Java, и я хочу, чтобы каждый пользователь имел возможность изменить собственный пароль через приложение.Изменение пароля Active Directory через Spring LDAP

Это мой код:

public void changePassword() 
{ 
    LdapContextSource contextSource = new LdapContextSource(); 
    contextSource.setUrl("LDAPS://X.Y.Z.T/"); 
    contextSource.setBase("DC=example,DC=com"); 
    contextSource.setUserDn("[email protected]"); 
    contextSource.setPassword("oldpass"); 
    contextSource.afterPropertiesSet(); 

    LdapTemplate ldapTemplate = new LdapTemplate(contextSource); 

    byte[] li_byOldpass = encodePassword("oldpass"); 
    byte[] li_byNewpass = encodePassword("newpass"); 

    Attribute oldattr = new BasicAttribute("unicodePwd", li_byOldpass); 
    Attribute newattr = new BasicAttribute("unicodePwd", li_byNewpass); 
    ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr); 
    ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr); 
    ModificationItem repitem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, newattr); 

    ModificationItem[] mods = new ModificationItem[2]; 
    mods[0] = olditem; 
    mods[1] = newitem; 

    try 
    { 
     ldapTemplate.modifyAttributes("CN=Name Surname,OU=Office,DC=example,DC=com", new ModificationItem[] { repitem }); 
    }catch(Exception e) 
    { 
     System.out.println("Error in changing password on Active Directory: " + e.getMessage()); 
    } 
} 

К сожалению, это не работает, и это errore, что я получаю:


[LDAP: код ошибки 32 - 0000208D: NameErr : DSID-0310020A, проблема 2001 (NO_OBJECT), данные 0, наилучшее соответствие: «DC = пример, DC = com»];


Любая помощь будет признателен

Благодаря

+0

Надеюсь, что это поможет: http: //forum.spring.io/forum/spring-projects/data/ldap/22371-ldap-error-code-32-no-such-object – Arpit

+0

Не могли бы вы решить вашу проблему? –

ответ

0

Этот ответ для потомков

Проверить эту ссылку: http://www.baeldung.com/spring-ldap

Exemple кода:

@Autowired 
    private LdapTemplate ldapTemplate; 

    private static final String BASE_DN = "OU=Metaverse"; 

    protected void buildDn(UserAd user) { 
     Name dn = LdapNameBuilder.newInstance(BASE_DN) 
      .add("OU", "Orga_Unit") 
      .add("OU", "Orga_Unit") 
      .add("CN", "ldap_cn").build(); 

     DirContextAdapter context = new DirContextAdapter(dn); 

     context.setAttributeValues(
      "objectclass", 
      new String[] 
      { "top", 
      "person", 
      "organizationalPerson"}); 
     context.setAttributeValue("sn", "CREATETEST"); 
     context.setAttributeValue("userPassword","password"); 

     ldapTemplate.bind(context); 
    }