java - CAS 5.2.3 & LDAP 属性
问题描述
我有 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”)并获取该用户所属的所有 groupNames(最好在 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
即使它有效,我如何才能将响应收集到字符串列表中并将它们放入常规 Java 类中?
解决方案
不幸的是,使用这种数据结构,您将无法收集属性。
但是,有一个解决方案。您可以在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") //This is not necessary, but if you have other spring components, it will definitely help.
接下来,您将可以访问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 ();
}
推荐阅读
- python - 分离以保持 web 浏览器在 selenium webdriver python 中打开不工作
- sql - 在雪花中将 VARCHAR 转换为 DATE
- laravel - 使用 Laravel 进行 Firebase 身份验证
- firebase - 使用 Firebase Auth 检测用户是否从站点 B 登录到站点 A
- delphi - FMX TEdit 在 iOS 上无法接受 ASCII 单引号
- intellij-idea - 鼠标单击使用的 IntelliJ 快捷键是什么?
- groovy - 如何在 Activiti 工作流的单独实例中强制顺序执行任务
- docker - 当用户单击应用程序中的按钮时,如何使用 GitLab CI 或 Jenkins 触发 Pipeline CI/CD?
- python - 将微秒 Float64Index 转换为 DateTimeIndex Pyton
- arrays - 根据索引从数组中删除一个元素(vba)