CAS 5.2.3 和 LDAP 属性

CAS 5.2.3 & LDAP Attribute

我有 CAS 5.2.3 和 LDAP 连接。

LDAP 有 1 个域和 2 个 ou(ou = 组,ou = 人)。每个组都有一个带有组名的 cn。每个这样的组都包含几个成员,其中指定了 ou = people 的用户名。

最初(在身份验证期间)用户连接到 ou=people。接下来,我们需要从 ou=groups.

获取其组列表(一个用户可以在多个组中)

我的任务是在用户通过身份验证时获取用户组,以便更新它们。

我需要传递用户(例如:“cn=MOrlova, ou=people, dc=domain, dc=ru”)并获取该用户所属的所有组名(最好在字符串中[ ]).数据结构是这样的

LDAP 示例:

我不明白我需要在 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

即使它有效,我如何才能将响应收集到字符串列表中并以常规方式获取它们Java class?

很遗憾,使用此数据结构,您将无法收集属性。

但是,有一个解决办法。您可以在 src/main/resources/META-INF/ 中创建一个名为 spring.factories 的文件,并在其中指定: org.springframework.boot.autoconfigure.EnableAutoConfiguration=CasConfiguration

创建src/main/java/ru/security/core/cas/config包并在那里创建CasConfigurationclass。

您需要注释:

@Configuration ("MyConfiguration")
@EnableConfigurationProperties (CasConfigurationProperties.class)
@ComponentScan ("ru.security.core.cas") //This is not necessary, but if you have other spring components, it will definitely help.

接下来,您将可以访问 CasConfigurationProperties。我们在 CasConfiguration class:

   @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 ();
        }