Tomcat 9 server.xml中LDAP用户角色过滤查询失效问题求助
问题描述
需要筛选并导入拥有LR_aa_Users_r或LR_aa_Admin_STAGE_f角色的用户,将对应LDAP查询配置到Tomcat 9的server.xml中时无法生效,但该查询在Apache Directory Studio等桌面LDAP工具中可正常运行,怀疑Tomcat不支持这类用户过滤,寻求解决办法。
可正常运行的LDAP查询(Apache Directory Studio中)
userSearch="(&(sAMAccountName={0})(|(memberOf=CN=LR_aa_Users_r,OU=PF00_ESC-aaa,OU=PF00_Generic,OU=PF00_Res,OU=PF00,DC=aaaa,DC=net)(memberOf=CN=LR_aa_Admin_STAGE_f,OU=PF00_ESC-aa,OU=PF00_Generic,OU=PF00_Res,OU=PF00,DC=aaaa,DC=net)))"
Tomcat 9 server.xml中的配置代码
connectionURL="ldaps://aaa.aaaa.net:3269" alternateURL="ldaps://aaa.aaaa.net:3269" adCompat="true" connectionName="CN=SA-Test-aa-LDAP,OU=Test_ESC-aa,OU=Test_Generic,OU=Test_Res,OU=Test,DC=aaaa,DC=net" connectionPassword="pass" userSubtree="true" userBase="DC=aaaa,DC=net" userSearch="(&(sAMAccountName={0})(|(memberOf=CN=LR_aa_Users_r,OU=PF00_ESC-aaa,OU=PF00_Generic,OU=PF00_Res,OU=PF00,DC=aaaa,DC=net)(memberOf=CN=LR_aa_Admin_STAGE_f,OU=PF00_ESC-aa,OU=PF00_Generic,OU=PF00_Res,OU=PF00,DC=aaaa,DC=net)))" userRoleName="memberOf" roleBase="DC=aaaa,DC=net" roleName="cn" roleSearch="(member={0})" roleSubtree="true" roleNested="true" spnegoDelegationQop="auth" referrals="follow"/>
排查与解决建议
- 修正转义字符错误:Tomcat XML配置中
&需转义为&,但你配置里的userSearch用了&,这会导致实际发送给LDAP的查询是&而非&,直接破坏查询语法。把&改成&即可,和工具里的有效查询保持一致。 - 检查连接账号权限:确认
SA-Test-aa-LDAP账号有权限读取目标用户的memberOf属性,以及查询这两个角色组的成员信息。部分AD环境中,普通账号无法读取嵌套组或特定OU下的组数据。 - 适配嵌套组场景:如果用户是通过嵌套组继承的角色,默认
memberOf只匹配直接成员,查询会失效。要包含嵌套组,要么改用AD扩展语法:(&(sAMAccountName={0})(|(memberOf:1.2.840.113556.1.4.1941:=CN=LR_aa_Users_r,...)(memberOf:1.2.840.113556.1.4.1941:=CN=LR_aa_Admin_STAGE_f,...)));要么放弃在userSearch里过滤,依赖roleNested="true"配置来加载角色。 - 开启调试日志定位问题:在Tomcat的
logging.properties中添加org.apache.catalina.realm.LDAPRealm.level = FINE,重启后查看日志,能看到实际发送的LDAP查询和返回结果,快速定位错误点。 - 简化查询逐步测试:先去掉角色过滤,只保留
(&(sAMAccountName={0})),确认用户能正常登录后,再逐步添加|和memberOf条件,排查哪部分配置出了问题。
内容的提问来源于stack exchange,提问作者Suat Coskun
相关产品推荐
相关产品推荐

