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>
문제보다 해결하기 위해 어떤 방법이 있나요 다음
는이 목적을 위해 사용되는 코드입니다. ?
내가 이미 시도했다. 어디 LdapQueryBuilder.query() ";"이 일을 didnt한다. –
@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이 아닙니다. 또한, 귀하의 질문에 당신은 필터'어디 ("memberOf = CN")'dn 매개 변수에 관계없이 작동하지 않습니다 언급했다. – EricLavault
@JobyWilsonMathews 그래서 질문을 한 다음 대답과 관련이없는 무언가를 시도했다고 말하면 작동하지 않습니다. – EricLavault