2017-01-03 13 views
0

Gooday,spring-ldap auto fetch Поля от

Работая над инструментом, который позволяет пользователям изменять его пароль (сгенерирован). И я перехожу к проблеме litle, где используется Spring Ldap (2.1.0.RELEASE).

Теперь мы хотим установить некоторые из эксплуатационных атрибутов. Это код, я использую:

public void updatePassword(LdapUser ldapUser) { 
    String[] userOrg = ldapUser.getUserName().split("@"); 
    Name dn = buildDn(userOrg[1], ldapUser.getUserName()); 
    DirContextOperations context = ldapTemplate.lookupContext(dn); 
    context.setAttributeValue(USER_PASSW, ldapUser.getUserPassword()); 
    if(!context.attributeExists("pwdReset")) { 
     context.setAttributeValue("pwdReset", "TRUE"); 
    } 
    ldapTemplate.modifyAttributes(context); 
    } 

Теперь до тех пор операционного атрибута pwdReset никогда не установлен этот бит кода работает отлично. Но если он когда-либо был установлен (и, следовательно, значение FALSE). Вы можете получить код ошибки:

LDAP: Код ошибки 20 - изменить/добавить: pwdReset: значение # 0 уже существует

Теперь я знаю его по дизайну Ldap не дает эксплуатационные свойства назад. Но в Spring Ldap должен быть способ сказать, что вы всегда хотите иметь операционные атрибуты.

Anny sugestions было бы здорово.

ответ

0

Вы тестируете неправильную вещь. Тестирование на существование в любом случае бессмысленно. Вы должны проверить, установлено ли оно уже ИСТИНА, и только установить его, если это не так.

На самом деле вам следует просто удалить тест, так как тест столь же дорогой, как и комплект. Я бы также рекомендовал не устанавливать его в ЛОЖЬ, а скорее полностью удалить атрибут, который имеет ту же семантику, что и FALSE. Без теста и с этим изменением вы не сможете получить эту проблему.