사용 용도에 따라 다릅니다. AD의 역할 만 알고 싶다면 LDAP에서 수동 검색을 수행 할 수 있습니다.
예 : 사용자 이름은, 예를 들어 사용자의 전체 DN되어야한다는
import javax.naming.*;
import javax.naming.directory.*;
public class test {
public String ldapUri = "ldap://localhost";
public String usersContainer = "cn=users,dc=example,dc=com"; // base DN for search
public String username = "user";
public String password = "pass";
public static void main(String args[]){
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUri);
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.REFERRAL, "follow");
try {
DirContext ctx = new InitialDirContext(env);
SearchControls ctls = new SearchControls();
String name = "your_username"; // full DN name
NamingEnumeration answer = ctx.search(usersContainer, "(member=" + name + ")",ctls);
while(answer.hasMore()) {
SearchResult rslt = (SearchResult)answer.next();
Attributes attrs = rslt.getAttributes();
System.out.println(attrs.get("cn"));
}
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
참고 CN=user1,CN=users,DC=company,DC=com
응용 프로그램에서 이러한 그룹을 역할 할당에 사용하려면 약간 까다 롭습니다. 이를 달성하려면 사용자 정의 ServerAuthModule (예 : here)이 필요하거나 AD/LDAP의 데이터를 기반으로 역할을 할당하려면 SPNEGO 부분을 수정해야합니다.
할 수 있었습니까? 예라고 대답하는 경우 여기에 답변을 추가 하시겠습니까? –