자바 ldap 프로 토 콜 을 어떻게 호출 합 니까 [LdapContext]
그룹 사용자 id 로 로그 인 해 야 하 는 시스템 을 만 들 었 습 니 다.그룹 사용자 시스템 은 ldap 로 만 들 었 습 니 다.
포인트
1. 연결 설정
ctx = new InitialLdapContext(env, connCtls);
2. url 과 조회 의 하위 경 로 를 설정 합 니 다.
env.put(Context.PROVIDER_URL, URL);//LDAP server env.put(Context.SECURITY_PRINCIPAL, SEARCHDN);
3. 비밀번호 설정
env.put(Context.SECURITY_CREDENTIALS, "password");
4. 반환 값 속성 획득
if (obj instanceof SearchResult) { SearchResult si = (SearchResult) obj; Attributes userInfo = si.getAttributes(); userDN += userInfo.toString(); userDN += ","+ BASEDN; }
5. 제3자 에 게 다운로드 할 필요 가 없습니다. ldapjdk. jar 는 사용 하지 않 습 니 다.
배경 지식:
LDAP 는 경 량 디 렉 터 리 접근 프로 토 콜 로 영문 은 모두 Lightweight Directory Access Protocol 이 라 고 하 며 일반적으로 LDAP 라 고 부른다.그것 은 X. 500 기준 을 바탕 으로 하지만 훨씬 간단 하고 수요 에 따라 맞 춤 형 제작 이 가능 하 다.X. 500 과 달리 LDAP 는 TCP/IP 를 지원 합 니 다. 이것 은 인터넷 에 접근 하 는 데 필수 적 입 니 다.LDAP 의 핵심 규범 은 RFC 에서 정의 되 며, LDAP 와 관련 된 모든 RFC 는 LDAPman RFC 홈 페이지 에서 찾 을 수 있다.
소스 코드 는 다음 과 같 습 니 다.
package com.domain;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class UserAuthenticate {
private String URL = "ldap://localhost:389";
private String SEARCHDN = "CN=alimailfad,OU=service,DC=hz,DC=ali,DC=com";
private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private String BASEDN = "DC=hz,DC=ali,DC=com";
private LdapContext ctx = null;
private Hashtable env = null;
private Control[] connCtls = null;
private void LDAP_connect() {
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY);
env.put(Context.PROVIDER_URL, URL);// LDAP server
env.put(Context.SECURITY_PRINCIPAL, SEARCHDN);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, "password");
// ,
try {
ctx = new InitialLdapContext(env, connCtls);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String getUserDN(String email) {
String userDN = "";
LDAP_connect();
try {
String filters = "(&(&(objectCategory=person)(objectClass=user))(sAMAccountName=elbert.chenh))";
String[] returnedAtts = { "distinguishedName",
"userAccountControl", "displayName", "employeeID" };
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
if (returnedAtts != null && returnedAtts.length > 0) {
constraints.setReturningAttributes(returnedAtts);
}
NamingEnumeration en = ctx.search(BASEDN, filters, constraints);
if (en == null) {
System.out.println("Have no NamingEnumeration.");
}
if (!en.hasMoreElements()) {
System.out.println("Have no element.");
} else {
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
Attributes userInfo = si.getAttributes();
userDN += userInfo.toString();
userDN += "," + BASEDN;
} else {
System.out.println(obj.toString());
}
System.out.println(userDN);
}
}
} catch (Exception e) {
System.out.println("Exception in search():" + e);
}
return userDN;
}
public boolean authenricate(String ID, String password) {
boolean valide = false;
String userDN = getUserDN(ID);
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
ctx.reconnect(connCtls);
System.out.println(userDN + " is authenticated");
valide = true;
} catch (AuthenticationException e) {
System.out.println(userDN + " is not authenticated");
System.out.println(e.toString());
valide = false;
} catch (NamingException e) {
System.out.println(userDN + " is not authenticated");
valide = false;
}
return valide;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.