我想使用Spring Security ldap认证。但是我想递归遍历ldap树。不幸的是,我只能找到一个级别或深度的用户。
例如,我的用户树如下所示:
ouUsers:具有用户(user1,user2等)和子树(ouGenel,ouYatay)。
并且子树具有子树和用户。
我想递归遍历ldap树以在Spring安全项目中进行身份验证。
下面是我的春季认证代码,我应该在代码中进行哪些更改? :
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("CN={0},OU=ouUsers")
.groupSearchBase("ou=ouUsers")
.contextSource()
.url(url+"/"+base)
.managerDn(dn)
.managerPassword(password)
.and()
.passwordCompare()
.passwordEncoder(new LdapShaPasswordEncoder())
.passwordAttribute("sn");
}
谢谢
答案 0 :(得分:1)
您需要使用userSearchFilter()
和userSearchBase()
而不是userDnPatterns()
。
userDnPatterns
尝试通过以提供的模式替换用户登录名并从LDAP URL追加基本来匹配DN。
如果所有用户都存储在单个节点下中,则可以 目录。
userSearchFilter()
可用于匹配常规请求中的登录名,并在特定基准下搜索树(默认SearchScope = SUBTREE
)。 userSearchBase()
可以可选地用于设置用户条目所在的分支rdn,并从该分支执行搜索。如果未指定,则搜索将包括从LDAP URL的基本dn开始的整个目录。
将userDnPatterns()替换为以下内容应该可以:
.userSearchBase('ou=ouUsers')
.userSearchFilter('(cn={0})')
https://docs.spring.io/spring-security/site/docs/3.0.x/reference/ldap.html#d0e5940