在LDAP中使用ContainerCriteria检查用户是否具有特定组时发出问题

时间:2017-12-20 06:53:14

标签: java ldap spring-ldap

目前我正在开发一个用户通过LDAP进行身份验证的应用程序。成功登录的标准基于正确的用户名,密码和组(TEST-FFSUS-CALBR-USER)。

我能够使用用户名和密码标准成功登录,但不能使用组标准登录。

以下是用于此目的的代码:

 @Resource
 LdapTemplate ldapTemplate;

public boolean login(String username, String password) {
         try {
                ContainerCriteria searchCriteria = getLdapFilterCriteria(username);
                boolean result = ldapTemplate.authenticate("OU=User,OU=fo-id,DC=feefusde,DC=rootdom,DC=net",
                        searchCriteria.filter().encode(), password);
                return result;
            } catch (Exception e) {
                return false;
            }
    }

 private ContainerCriteria getLdapFilterCriteria(String usernameOrEmail) {
        ContainerCriteria objectClassCriteria = LdapQueryBuilder.query().base("DC=rootdom,DC=net").where("objectClass")
                .is("user");
        ContainerCriteria mailCriteria = LdapQueryBuilder.query().where("mail").is(usernameOrEmail);
        ContainerCriteria cnCriteria = LdapQueryBuilder.query().where("CN").is(usernameOrEmail);
        ContainerCriteria roleCriteria = LdapQueryBuilder.query().where("memberOf=CN").is("TEST-FFSUS-CALBR-USER");
        ContainerCriteria userByMailOrCnCriteria = mailCriteria.or(cnCriteria);
        ContainerCriteria searchCriteria = objectClassCriteria.and(userByMailOrCnCriteria).and(roleCriteria);
        return searchCriteria;
    }

在应用程序上下文中:

 <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
    <property name="contextSource">
        <bean class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
            <constructor-arg>
                <value>ldap://urlofldap:portno</value>
            </constructor-arg>
            <property name="userDn" value="${ldap.username}" />
            <property name="password" value="${ldap.password}" />
        </bean>
    </property>
</bean>

有没有办法解决上述问题。 ?

1 个答案:

答案 0 :(得分:0)

memberOf属性应与组可分辨名称匹配。例如"CN=TEST-FFSUS-CALBR-USER,OU=roles,DC=feefusde,DC=rootdom,DC=net"

ContainerCriteria roleCriteria = LdapQueryBuilder.query().where("memberOf").is(groupDN);