2017-12-20 14 views
0

現在、LDAPを使用してユーザーを認証するアプリケーションを開発しています。正常なログインの基準は、正しいユーザ名、パスワード、およびグループ(TEST-FFSUS-CALBR-USER)に基づいています。LDAPにContainerCriteriaを使用して特定のグループがあるかどうかを確認する際の問題

ユーザー名とパスワードの条件では正常にログインできましたが、グループの条件では正常にログインできませんでした。アプリケーション・コンテキストで

@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> 

は、問題の上に解決する方法はあります。 ?

答えて

0

memberOf属性は、グループの識別名と一致する必要があります。例えば"CN=TEST-FFSUS-CALBR-USER,OU=roles,DC=feefusde,DC=rootdom,DC=net"ため:

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

Iはすでに "ここでLdapQueryBuilder.queryを()(" のmemberOf ")試み(TEST-FFSUS-CALBR-USER")である。 ";" が働いたdidntの。 –

+0

@JobyWilsonMathewsもちろん動作しませんでした!あなたが試したものが間違っています。「TEST-FFSUS-CA LBR-USER」と「CN = TEST-FFSUS-CALBR-USER、OU = roles、DC = feefusde、DC = rootdom、DC = net "'?私は明らかに 'memberOf'属性がグループ**の識別名**と一致する必要があります。 '' TEST-FFSUS-CA LBR-USER "'はdnではありません。また、あなたの質問では、フィルタ 'where(" memberOf = CN ")と言及し、dnパラメータに関係なく動作しません。 – EricLavault

+0

@JobyWilsonMathewsだから、あなたは質問をして、答えとは何の関係もない何かを試してみて、それはうまくいかないと言っていますか? – EricLavault

関連する問題