Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基本上的LDAP Active Directory组搜索不深入以包括多个OU_Java_Spring Security_Ldap_Spring Ldap - Fatal编程技术网

Java 基本上的LDAP Active Directory组搜索不深入以包括多个OU

Java 基本上的LDAP Active Directory组搜索不深入以包括多个OU,java,spring-security,ldap,spring-ldap,Java,Spring Security,Ldap,Spring Ldap,我试图在Java应用程序中检索身份验证用户的所有广告组,这些组来自两个不同的组织单位。到目前为止,我只能使用Spring Security检索一组组或另一组,并设置以下任一搜索基础: OU=RoleGroups,OU=UEU,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com 或 OU=RoleGroups,OU=MOR,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com 这些仅在我将其与简单搜索筛选器一起使用时返回结果: (member=CN

我试图在Java应用程序中检索身份验证用户的所有广告组,这些组来自两个不同的组织单位。到目前为止,我只能使用Spring Security检索一组组或另一组,并设置以下任一搜索基础:

OU=RoleGroups,OU=UEU,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com

OU=RoleGroups,OU=MOR,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com

这些仅在我将其与简单搜索筛选器一起使用时返回结果:

(member=CN=Adam,OU=Users,DC=ah1,DC=ad,DC=megacorp,DC=com)

使用
Spring Security ldap
库的Spring Security只允许我进行一次查询,否则我将不得不开始覆盖第三方库类以进行第二次调用

我只是想知道我是否可以应用这两个问题中的任何东西:

但我仍然找不到解决办法。就我所知,通过将所有内容改为“执行组”而不是“用户”,我应该做到以下几点:

使用端口3268而不是389

使用搜索库
DC=ah1,DC=ad,DC=megacorp,DC=com

使用搜索筛选器
(&(objectCategory=RoleGroup)(objectclass=group)(member={0}))

这应该以“全局目录搜索”的形式运行我的查询。我不能让它工作-没有结果返回-我的搜索基础从空到零长度字符串的任何变化,并希望智能地改变我的搜索过滤器

还有一种广告全局目录搜索技术,它使用了对
userAccountControl
等的某种数字引用,但深入研究微软广告是否有类似的“groupControl”属性还很不清楚

我看到一个名为
RoleGroups
的组织单元,这是Active Directory,但我不知道我是否应该在我的搜索筛选器中引用它,如上所示:

&(objectClass=group)(member={0}))

&(objectCategory=RoleGroup)(objectclass=group)(member={0}))

当我有
objectClass
objectClass
objectCategory
objectCategory
时,除了尝试和错误之外,我什么都没有,到目前为止,都是错误


当我试图使用一个简单的过滤器从
DC=megacorp,DC=com
搜索库中搜索时,完全没有返回的组,这让我怀疑我可能配置了错误的内容。但我不知道那是什么。我已经设置了可用的Spring配置属性,例如
searchSubtree=true
,以及
derefrink=true

成员属性具有DN语法,因此,它期望整个用户的DN,而不仅仅是CN匹配组中的一个成员。

我决定使用Microsoft AD Client工具
dsquery
深入研究这个问题

最初我对专有名称中的括号有问题,例如:

$ dsquery user -samid craxyz01
"CN=Bloggs\, Joe (SUPERHERO AGSC),OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com"
为了让
dsquery
做出响应,我必须避开括号:

$ dsquery * "DC=ah1,DC=ad,DC=megacorp,DC=com" -filter "(&(objectClass=group)(member=CN=Bloggs\, Joe \28SUPERHERO AGSC\29,OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com))"
此查询深入查看下面的所有组织单位,无论是在
OU=UEU
还是
OU=MOR

现在在我的Java应用程序中

组搜索基数=
DC=ah1,DC=ad,DC=megacorp,DC=com

和组搜索筛选器=
(&(objectClass=group)(member={0}))

很明显,Spring做了一些错误的事情,可能没有逃过斜杠
/
,但由于它的反射,很难判断。它确实调用了
LdapEncoder.filterEncode()
,看起来它应该可以工作

多亏了


我将直接发布一个关于spring安全性的新问题,并确保它ping回链接。

您的用户位于Microsoft Active Directory中的什么上下文?我不清楚你是在寻找某个群体的成员,还是??对不起,我只是把它编辑下来,以使我的问题更具可读性。我已经改正了。