spring-ldap автоматически выбирает операционные поля

Gooday,

Работали над инструментом, позволяющим пользователям сменить там пароль (сгенерированный). И я иду к небольшой проблеме, где используется 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 должен быть способ сказать ему, что вы всегда хотите иметь также Операционные атрибуты.

Любые предложения, было бы неплохо.

1 ответ

Решение

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

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

Другие вопросы по тегам