package com.connsec.util;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import org.apache.log4j.Logger;
/**
* @author Crystal
*
*/
public class LdapUtils {
final static Logger logger = Logger.getLogger(ActiveDirectoryUtils.class);
protected DirContext ctx;
protected String baseDN;
protected String providerUrl;
protected String principal;
protected String credentials;
protected String referral="ignore";
protected String trustStore;
protected String trustStorePassword;
protected boolean ssl;
protected int searchScope;
/**
*
*/
public LdapUtils() {
super();
this.searchScope=SearchControls.SUBTREE_SCOPE;
}
public LdapUtils(String providerUrl,String principal,String credentials) {
this.providerUrl=providerUrl;
this.principal=principal;
this.credentials=credentials;
this.searchScope=SearchControls.SUBTREE_SCOPE;
}
public LdapUtils(String providerUrl,String principal,String credentials,String baseDN) {
this.providerUrl=providerUrl;
this.principal=principal;
this.credentials=credentials;
this.searchScope=SearchControls.SUBTREE_SCOPE;
this.baseDN=baseDN;
}
public LdapUtils(DirContext dirContext) {
this.ctx=dirContext;
}
public void setSearchSubTreeScope(){
this.searchScope=SearchControls.SUBTREE_SCOPE;
}
public void setSearchOneLevelScope(){
this.searchScope=SearchControls.ONELEVEL_SCOPE;
}
protected DirContext InitialDirContext(Properties properties){
try {
ctx = new InitialDirContext(properties);
logger.info("connect to ldap "+providerUrl+" seccessful.");
} catch (NamingException e) {
logger.info("connect to ldap "+providerUrl+" fail.");
e.printStackTrace();
}
return ctx;
}
//connect to ldap server
public DirContext openConnection(){
logger.info("PROVIDER_URL:"+providerUrl);
logger.info("SECURITY_PRINCIPAL:"+principal);
logger.info("SECURITY_CREDENTIALS:"+credentials);
//LDAP
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.setProperty(Context.URL_PKG_PREFIXES, "com.sun.jndi.url");
props.setProperty(Context.REFERRAL, referral);
props.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
props.setProperty(Context.PROVIDER_URL, providerUrl);
props.setProperty(Context.SECURITY_PRINCIPAL,principal);
props.setProperty(Context.SECURITY_CREDENTIALS, credentials);
if(ssl){
System.setProperty("javax.net.ssl.trustStore", trustStore);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
props.put(Context.SECURITY_PROTOCOL, "ssl");
props.put(Context.REFERRAL, "follow");
}
return InitialDirContext(props);
}
public boolean authenticate(){
openConnection();
if(this.ctx!=null){
close();
return true;
}else{
return false;
}
}
public void close(){
close(this.ctx);
}
public void close( DirContext ctx){
if (null != ctx) {
try{
ctx.close();
}catch(Exception e){
e.printStackTrace();
}finally{
ctx=null;
}
}
}
public DirContext getCtx() {
return ctx;
}
public DirContext getConnection(){
if(ctx==null){
openConnection();
}
return ctx;
}
/**
* @return the baseDN
*/
public String getBaseDN() {
return baseDN;
}
/**
* @param baseDN the baseDN to set
*/
public void setBaseDN(String baseDN) {
this.baseDN = baseDN;
}
/**
* @return the searchScope
*/
public int getSearchScope() {
return searchScope;
}
/**
* @return the providerUrl
*/
public String getProviderUrl() {
return providerUrl;
}
public String getPrincipal() {
return principal;
}
public void setPrincipal(String principal) {
this.principal = principal;
}
public String getCredentials() {
return credentials;
}
public void setCredentials(String credentials) {
this.credentials = credentials;
}
public void setProviderUrl(String providerUrl) {
this.providerUrl = providerUrl;
}
/**
* @return the trustStore
*/
public String getTrustStore() {
return trustStore;
}
/**
* @param trustStore the trustStore to set
*/
public void setTrustStore(String trustStore) {
this.trustStore = trustStore;
}
/**
* @return the ssl
*/
public boolean isSsl() {
return ssl;
}
/**
* @param ssl the ssl to set
*/
public void setSsl(boolean ssl) {
this.ssl = ssl;
}
/**
* @return the referral
*/
public String getReferral() {
return referral;
}
/**
* @param referral the referral to set
*/
public void setReferral(String referral) {
this.referral = referral;
}
/**
* @return the trustStorePassword
*/
public String getTrustStorePassword() {
return trustStorePassword;
}
/**
* @param trustStorePassword the trustStorePassword to set
*/
public void setTrustStorePassword(String trustStorePassword) {
this.trustStorePassword = trustStorePassword;
}
public static String getAttrStringValue(Attributes attrs, String elem) {
String value = "";
try {
if (attrs.get(elem) != null) {
for (int i = 0; i < attrs.get(elem).size(); i++) {
value += "," + attrs.get(elem).get(i).toString();
}
value = value.substring(1);
}
} catch (NamingException e) {
e.printStackTrace();
}
return value;
}
}