DefaultLdapAuthoritiesPopulator配置groupSearchFilter含groupRoleAttribute时抛出NPE
这不是Spring实现的Bug,问题出在LDAP搜索过滤器的语法不符合规范。
错误原因
LDAP的多条件组合过滤必须用逻辑操作符(与&/或|/非!)包裹所有条件,你当前使用的过滤条件(cn=PREFIX*)(uniqueMember={0})是非法格式:两个并列条件没有用逻辑符包裹,LDAP服务无法识别该过滤规则,返回的结果结构不符合Spring Security LDAP组件的预期,进而在属性解析阶段触发空指针异常。
修复方案
将setGroupSearchFilter的入参调整为合法的与条件格式即可,修改后的完整代码如下:
FilterBasedLdapUserSearch filterSearch = new FilterBasedLdapUserSearch(baseDn, "cn={0}", connection); binder = new BindAuthenticator(connection); binder.setUserSearch(filterSearch); binder.afterPropertiesSet(); populator = new DefaultLdapAuthoritiesPopulator(connection, searchBase); // 用&包裹两个需要同时满足的条件,外层再加一对括号符合LDAP过滤器语法 populator.setGroupSearchFilter("(&(cn=PREFIX*)(uniqueMember={0}))"); populator.setGroupRoleAttribute("cn"); populator.setRolePrefix("");
补充说明
如果需要使用或逻辑过滤,将逻辑符替换为|即可,格式为(|(条件1)(条件2));若需要使用非逻辑,格式为(!(条件))。
内容的提问来源于stack exchange,提问作者user2028936
相关产品推荐
相关产品推荐

