CAS 5.2.3 & LDAP Attribute
У меня CAS 5.2.3 и соединение LDAP.
LDAP имеет 1 домен и 2 ou (ou=groups, ou=people). У каждой группы есть cn с названием группы. Каждая такая группа состоит из нескольких участников, где указано имя пользователя из ou=people.
Изначально (во время аутентификации) CAS подключен к ou=people. Далее нам нужно получить список групп пользователя (один пользователь может быть во многих группах) из ou=groups.
Моя задача - получить группы пользователя при его аутентификации, чтобы обновить их.
Мне нужно передать пользователя (например: «cn=MOrlova, ou=people, dc=domain, dc=ru») и получить все имена групп, членом которых является этот пользователь (предпочтительно в String []). Структура данных такая:
Я не понимаю, какие настройки мне нужно сделать в CAS для подключения. Я нашел их в описании CAS:
cas.authn.attributeRepository.ldap[2].ldapUrl=ldap://localhost:9080
cas.authn.attributeRepository.ldap[2].useSsl=false
cas.authn.attributeRepository.ldap[2].useStartTls=false
cas.authn.attributeRepository.ldap[2].connectTimeout=5000
cas.authn.attributeRepository.ldap[2].bindDn=cn=Manager,dc=domain,dc=ru
cas.authn.attributeRepository.ldap[2].bindCredential=Manager1
cas.authn.attributeRepository.ldap[2].userFilter=(&(member=cn{user})
cas.authn.attributeRepository.ldap[2].subtreeSearch=true
cas.authn.attributeRepository.ldap[2].dnFormat=cn=%s,ou=groups,dc=domain,dc=ru
Даже если это сработает, как я могу затем собрать ответ в String[] и получить их в обычном классе Java?
Ответы (1 шт):
К сожалению, с данной структурой данных через стандартные методы ничего не получится сделать.
Но решение найдено. Создаем файл по пути src/main/resources/META-INF/ называем spring.factories, там пишем:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=CasConfiguration
Создаем src/main/java/ru/security/core/cas/config пакет и там создаем CasConfiguration класс.
Нам потребуются аннотации:
@Configuration ("MyConfiguration")
@EnableConfigurationProperties (CasConfigurationProperties.class)
@ComponentScan ("ru.security.core.cas") //Это не обязательно, но если у нас есть другие классы, будет полезно.
Таким образом мы получаем доступ к CasConfigurationProperties. Пишем в классе CasConfiguration :
@Autowired
private CasConfigurationProperties casConfigurationProperties;
@Bean
public ConnectionFactory supportConnectionFactory () {
return LdapUtils.newLdaptivePooledConnectionFactory (
casConfigurationProperties.getAuthn().getLdap().get(0));
}
Таким образом, мы получили доступ к нашему активному соединению LDAP. Далее нам требуется отправить туда запрос и получить ответ, в нужном нам классе (в котором идет работа с LDAP у Вас в проекте) пишем вот такой запрос:
Response <SearchResult> response = null;
try {
response = LdapUtils.executeSearchOperation (connectionFactory, BASE_DN, LDAP_FILTER);
} catch (LdapException e) {
e.printStackTrace ();
}
Любые вопросы приветствуются.
