Spring boot Ldap身份验证不适用于spring引导

Spring boot Ldap身份验证不适用于spring引导,spring-boot,spring-security,active-directory,ldap,Spring Boot,Spring Security,Active Directory,Ldap,我能够使用spring boot获得LDAP身份验证ActiveDirectoryLdapAuthenticationProvider。同样的代码在其他客户机环境中也可以工作,但在某个客户机上却无法工作。 我能够连接到LDAP和bind,也可以访问roodn,一切都很好 在搜索过滤器中,代替使用默认过滤器,即: (&(objectClass=user)(userPrincipalName={0})) 我正在使用: (&(objectCategory=person)(object

我能够使用spring boot获得LDAP身份验证
ActiveDirectoryLdapAuthenticationProvider
。同样的代码在其他客户机环境中也可以工作,但在某个客户机上却无法工作。 我能够连接到LDAP和bind,也可以访问roodn,一切都很好

在搜索过滤器中,代替使用默认过滤器,即:

(&(objectClass=user)(userPrincipalName={0}))
我正在使用:

(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})) 
我尝试了很多搜索过滤器,但似乎都不起作用


任何人都可以在这方面提供帮助,我对LDAP了解不多。

问题是您是否应该通过
userPrincipalName
sAMAccountName
进行匹配。这取决于用户的期望

sAMAccountName
是您在说“用户名”时通常会想到的

userPrincipalName
看起来像一个电子邮件地址。它通常与
sAMAccountName
后接
@
和域名DNS名称相同,但不必如此

有关这方面的更多信息,请参见此处:


用户键入的用户名值应与您在此处选择的属性相匹配。

@gariel用户希望严格使用sAMAccountName登录。我使用电子邮件ID(&(objectClass=user)(userPrincipalName={0}))过滤器获得了登录名。但是,要使其在LDAP中使用sAMAccountName,将其更改为(&(objectClass=user)(sAMAccountName={0}))是行不通的。它们的sAMAccountName和userprincipalname不相同

作为一种解决方法,不是完全依赖spring安全性进行身份验证, 用户输入sAMAccoutName,我使用自定义过滤器拦截请求。在自定义筛选器中,我使用JAVA代码查询LDAP以向我提供该sAMAccountName的emailId。获得用户的emailID后,我将请求中的username字段从sAMAccountName更新为emailID,然后向前执行身份验证请求(请记住,我已经使用emailID进行了LDAP身份验证)

在SecurityConfig文件中:.addFilterBefore(new CustomFilter(),UsernamePasswordAuthenticationFilter.class) CustomFilter是我执行上述所有操作的地方


现在一切正常,但我有新问题。当用户成功进行身份验证时,若用户不在本地数据库中,并且不需要任何权限,那个么它可以正常工作。但是用户在本地数据库中被定义为管理员,身份验证后我们向其提供管理员权限,出于某种原因,因为自定义过滤器,它进入了一个循环。

日志说明了什么?