package com.connsec.authentication;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import org.apache.log4j.Logger;
import com.connsec.domain.Authentication;
import com.connsec.domain.UsernamePasswordAuthenticationToken;
import com.connsec.util.LdapUtils;
import com.connsec.web.WebConstants;
import com.connsec.web.WebSignConfig;
public class LdapAuthenticationProvider extends AbstractAuthenticationProvider{
final static Logger logger = Logger.getLogger(LdapAuthenticationProvider.class);
@Override
public Authentication doAuthentication(Authentication authentication) {
UsernamePasswordAuthenticationToken authenticationToken=(UsernamePasswordAuthenticationToken)authentication;
LdapUtils ldapUtils=new LdapUtils(
WebSignConfig.getInstance().get("config.ldap.providerUrl"),
WebSignConfig.getInstance().get("config.ldap.principal"),
WebSignConfig.getInstance().get("config.ldap.credentials"),
WebSignConfig.getInstance().get("config.ldap.baseDN")
);
String queryFilter = "("+WebSignConfig.getInstance().get("config.ldap.filterAttribute")+"="+authenticationToken.getPrincipal()+")";
String dn="";
SearchControls constraints = new SearchControls();
constraints.setSearchScope(ldapUtils.getSearchScope());
try {
NamingEnumeration<SearchResult> results = ldapUtils.getConnection()
.search(ldapUtils.getBaseDN(), queryFilter, constraints);
if (results == null || !results.hasMore()) {
logger.error("Ldap user "+authenticationToken.getPrincipal() +" not found . ");
authentication.getRequest().getSession().setAttribute(WebConstants.SIGN_IN_ERROR, 3);
return null;
}else{
while (results != null && results.hasMore()) {
SearchResult sr = (SearchResult) results.next();
//String rdn = sr.getName();
dn = sr.getNameInNamespace();
logger.debug("Directory user dn is "+dn+" .");
}
}
} catch (NamingException e) {
logger.error("query throw NamingException:" + e.getMessage());
} finally {
ldapUtils.close();
}
LdapUtils ldapPassWordValid=new LdapUtils(ldapUtils.getProviderUrl(),dn,authenticationToken.getCredentials());
ldapPassWordValid.openConnection();
if(ldapPassWordValid.getCtx()==null){
logger.debug("Directory user " + authenticationToken.getPrincipal() + " is validate .");
ldapPassWordValid.close();
authentication.getRequest().getSession().setAttribute(WebConstants.SIGN_IN_ERROR, 4);
return null;
}
return new UsernamePasswordAuthenticationToken(authenticationToken.getPrincipal(),authenticationToken.getCredentials());
}
}