diff --git a/sandbox/src/main/java/org/acegisecurity/providers/dao/ldap/InitialDirContextFactory.java b/sandbox/src/main/java/org/acegisecurity/providers/dao/ldap/InitialDirContextFactory.java new file mode 100644 index 0000000000..daf1e1e4d9 --- /dev/null +++ b/sandbox/src/main/java/org/acegisecurity/providers/dao/ldap/InitialDirContextFactory.java @@ -0,0 +1,170 @@ +package net.sf.acegisecurity.providers.dao.ldap; + +import java.util.Hashtable; +import java.util.Map; +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.directory.InitialDirContext; +import org.springframework.dao.DataAccessResourceFailureException; + +/** + * @see http://java.sun.com/products/jndi/tutorial/ldap/connect/config.html + * + * @author robert.sanders + * + */ +public class InitialDirContextFactory { + + /** + * LDAP URL (without the port) of the LDAP server to connect to; example + * ldap://dir.mycompany.com:389/dc=mycompany,dc=com (port 389 is the standard LDAP port). + */ + private String URL; + + /** If your LDAP server does not allow anonymous searches then + * you will need to provide a username with which to login with; + * this is that username. + */ + private String managerUser; + + /** If your LDAP server does not allow anonymous searches then + * you will need to provide a username with which to login with; + * this is the password of that user. + */ + private String managerPassword; + + /** Type of authentication within LDAP; default is simple. */ + private String authenticationType = "simple"; + + /** The INITIAL_CONTEXT_FACTORY used to create the JNDI Factory. + * Default is "com.sun.jndi.ldap.LdapCtxFactory"; you should not + * need to set this unless you have unusual needs. + **/ + private String initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"; + + /** Allows extra environment variables to be added at config time. */ + private Map extraEnvVars = null; + + /** Use the LDAP Connection pool (in SUN JVMs)?; if true, then the + * LDAP environment property "com.sun.jndi.ldap.connect.pool" is added + * to any other JNDI properties. + * @see http://java.sun.com/products/jndi/tutorial/ldap/connect/pool.html + * @see http://java.sun.com/products/jndi/tutorial/ldap/connect/config.html + */ + private boolean connectionPoolEnabled = true; + + public InitialDirContext newInitialDirContext() throws DataAccessResourceFailureException { + Hashtable env = getEnvironment(); + if (managerUser != null) { + env.put(Context.SECURITY_PRINCIPAL, managerUser); + env.put(Context.SECURITY_CREDENTIALS, managerPassword); + } + try { + return new InitialDirContext(env); + } catch (NamingException nx) { + throw new DataAccessResourceFailureException("Unable to connect to LDAP Server; check managerUser and managerPassword.", nx); + } + } + + /** + * @return The Hashtable describing the base DirContext that will be created; minus the username/password if any. + */ + protected Hashtable getEnvironment() { + Hashtable env = new Hashtable(11); + env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory); + env.put(Context.PROVIDER_URL, URL); + env.put(Context.SECURITY_AUTHENTICATION, authenticationType); + if (connectionPoolEnabled) { + env.put("com.sun.jndi.ldap.connect.pool", "true"); + } + if ((extraEnvVars != null) && (extraEnvVars.size() > 0)) { + env.putAll(extraEnvVars); + } + return env; + } + + /** + * @return Returns the authenticationType. + */ + public String getAuthenticationType() { + return authenticationType; + } + + /** + * @param authenticationType The authenticationType to set. + */ + public void setAuthenticationType(String authenticationType) { + this.authenticationType = authenticationType; + } + + /** + * @return Returns the initialContextFactory. + */ + public String getInitialContextFactory() { + return initialContextFactory; + } + + /** + * @param initialContextFactory The initialContextFactory to set. + */ + public void setInitialContextFactory(String initialContextFactory) { + this.initialContextFactory = initialContextFactory; + } + + /** + * @return Returns the managerPassword. + */ + public String getManagerPassword() { + return managerPassword; + } + + /** + * @param managerPassword The managerPassword to set. + */ + public void setManagerPassword(String managerPassword) { + this.managerPassword = managerPassword; + } + + /** + * @return Returns the managerUser. + */ + public String getManagerUser() { + return managerUser; + } + + /** + * @param managerUser The managerUser to set. + */ + public void setManagerUser(String managerUser) { + this.managerUser = managerUser; + } + + /** + * @return Returns the uRL. + */ + public String getURL() { + return URL; + } + + /** + * @param url The uRL to set. + */ + public void setURL(String url) { + URL = url; + } + + /** + * @return Allows extra environment variables to be added at config time. + */ + public Map getExtraEnvVars() { + return extraEnvVars; + } + + /** + * @param extraEnvVars Allows extra environment variables to be added at config time. + */ + public void setExtraEnvVars(Map extraEnvVars) { + this.extraEnvVars = extraEnvVars; + } + +}