As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<br>//******************************************************************************<br>//* Author: Michael Hoffmann<br>//* Date : 14.04.2013<br>//* File : LdapUserManagerFactory.java<br>//******************************************************************************<br><br>package ldap;<br><br>//******************************************************************************<br>//* Dependencies<br>//******************************************************************************<br><br>import org.activiti.engine.impl.interceptor.Session;<br>import org.activiti.engine.impl.interceptor.SessionFactory;<br>import org.activiti.engine.impl.persistence.entity.UserEntityManager;<br><br>//******************************************************************************<br>//* Class Definition<br>//******************************************************************************<br><br>public class LdapUserManagerFactory implements SessionFactory {<br><br> //————————————————————————–<br> // Member<br> //————————————————————————–<br> <br> private LdapSetting ldapSetting;<br> <br> LdapUserManagerFactory(LdapSetting ldapSetting)<br> { this.ldapSetting = ldapSetting; }<br> <br> //————————————————————————–<br> // Interface<br> //————————————————————————–<br> <br> @Override<br> public Class<?> getSessionType() <br> { return UserEntityManager.class; }<br><br> @Override<br> public Session openSession() <br> { return new LdapUserManager(ldapSetting); }<br><br>}<br>
<br>//******************************************************************************<br>//* Author: Michael Hoffmann<br>//* Date : 14.04.2013<br>//* File : LdapUserManager.java<br>//******************************************************************************<br><br>package ldap;<br><br>//******************************************************************************<br>//* Dependencies<br>//******************************************************************************<br><br>import java.util.logging.Level;<br>import java.util.logging.Logger;<br>import javax.naming.NamingException;<br>import org.activiti.engine.impl.persistence.entity.UserEntityManager;<br><br>//******************************************************************************<br>//* Class Definition<br>//******************************************************************************<br><br>public class LdapUserManager extends UserEntityManager {<br><br> //————————————————————————–<br> // Member<br> //————————————————————————–<br> <br> private static final Logger LOGGER = <br> Logger.getLogger(LdapUserManager.class.getName());<br> <br> private LdapSetting ldapSetting;<br> private LdapAdapter ldapAdapter;<br> <br> //————————————————————————–<br> // Ctor<br> //————————————————————————–<br> <br> public LdapUserManager(LdapSetting ldapSetting)<br> { <br> this.ldapSetting = ldapSetting;<br> this.ldapAdapter = new LdapAdapter();<br> }<br><br> //————————————————————————–<br> // Inheritance<br> //————————————————————————–<br> <br> @Override<br> public Boolean checkPassword(String userId, String password) {<br> <br> LOGGER.log(Level.INFO,"checking password…");<br> String uid = "cn=" + userId +",ou=users,ou=system";<br> <br> try {<br> <br> ldapSetting.setSecurityPrincipal(uid);<br> ldapSetting.setSecurityCredential(password);<br> <br> if(ldapAdapter.authenticate(ldapSetting))<br> {<br> ldapAdapter.close();<br> LOGGER.log(Level.INFO,"LDAP authentication successful: " + uid);<br> return true;<br> }<br> } <br> catch (NamingException e) <br> { e.printStackTrace(); }<br> <br> LOGGER.log(Level.INFO,"LDAP authentication failed: " + uid);<br> return Boolean.FALSE;<br> }<br>}<br>
<br>//******************************************************************************<br>//* Author: Michael Hoffmann<br>//* Date : 14.04.2013<br>//* File : LdapSetting.java<br>//******************************************************************************<br><br>package ldap;<br><br>//******************************************************************************<br>//* Dependencies<br>//******************************************************************************<br><br>// …<br><br>//******************************************************************************<br>//* Class Definition<br>//******************************************************************************<br><br>public class LdapSetting {<br><br> //————————————————————————–<br> // Member<br> //————————————————————————–<br> <br> private String ldapUrl;<br> private String ldapPort;<br> private String securityAuthentication;<br> private String securityCredential;<br> private String securityPrincipal;<br> <br> //————————————————————————–<br> // Getter<br> //————————————————————————–<br> <br> public String getLdapUrl() <br> { return ldapUrl; }<br> <br> public String getLdapPort() <br> { return ldapPort; }<br><br> public String getSecurityAuthentication() <br> { return securityAuthentication; }<br> <br> public String getSecurityCredential() <br> { return securityCredential; }<br> <br> public String getSecurityPrincipal() <br> { return securityPrincipal; }<br><br> //————————————————————————–<br> // Setter<br> //————————————————————————–<br> <br> public void setLdapUrl(String ldapUrl) <br> { this.ldapUrl = ldapUrl; }<br> <br> public void setLdapPort(String ldapPort) <br> { this.ldapPort = ldapPort; }<br><br> public void setSecurityAuthentication(String securityAuthentication) <br> { this.securityAuthentication = securityAuthentication; }<br> <br> public void setSecurityCredential(String securityCredential) <br> { this.securityCredential = securityCredential; }<br> <br> public void setSecurityPrincipal(String securityPrincipal) <br> { this.securityPrincipal = securityPrincipal; }<br> <br> // Additional Getter<br> public String getProviderUrl()<br> { return ldapUrl + ":" + ldapPort; }<br> <br>}<br>
<br>//******************************************************************************<br>//* Author: Michael Hoffmann<br>//* Date : 14.04.2013<br>//* File : LdapAdapter.java<br>//******************************************************************************<br><br>package ldap;<br><br>//******************************************************************************<br>//* Dependencies<br>//******************************************************************************<br><br>import java.util.Hashtable;<br>import java.util.logging.Level;<br>import java.util.logging.Logger;<br><br>import javax.naming.Context;<br>import javax.naming.InitialContext;<br>import javax.naming.NamingException;<br><br>//******************************************************************************<br>//* Class Definition<br>//******************************************************************************<br><br>public class LdapAdapter {<br><br> //————————————————————————–<br> // Member<br> //————————————————————————–<br> <br> private final static String FACTORY =<br> "com.sun.jndi.ldap.LdapCtxFactory";<br> <br> private static final Logger LOGGER = <br> Logger.getLogger(LdapAdapter.class.getName());<br> <br> private Context context;<br> <br> //————————————————————————–<br> // Ldap<br> //————————————————————————–<br> <br> public boolean authenticate(LdapSetting ldapSetting) throws NamingException<br> {<br> LOGGER.log(Level.INFO,"try to connect");<br> Hashtable<String, String> env = new Hashtable<String, String>();<br> env.put(Context.INITIAL_CONTEXT_FACTORY,FACTORY);<br> env.put(Context.PROVIDER_URL,ldapSetting.getProviderUrl());<br> env.put(Context.SECURITY_AUTHENTICATION,ldapSetting.getSecurityAuthentication());<br> env.put(Context.SECURITY_PRINCIPAL,ldapSetting.getSecurityPrincipal());<br> env.put(Context.SECURITY_CREDENTIALS,ldapSetting.getSecurityCredential());<br><br> context = new InitialContext(env);<br> LOGGER.log(Level.INFO,"connected");<br> return context != null;<br> }<br> <br> public void close() throws NamingException<br> {<br> context.close();<br> LOGGER.log(Level.INFO,"connection closed");<br> }<br>}<br>
<br> <br> Snippet: activiti-standalone-context.xml<br> …<br><br> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"><br> <property name="dataSource" ref="dataSource" /><br> <property name="transactionManager" ref="transactionManager" /><br> <property name="databaseSchemaUpdate" value="true" /><br> <property name="jobExecutorActivate" value="true" /><br> <property name="customFormTypes"><br> <list><br> <bean class="org.activiti.explorer.form.UserFormType"/><br> <bean class="org.activiti.explorer.form.ProcessDefinitionFormType"/> <br> <bean class="org.activiti.explorer.form.MonthFormType"/> <br> </list><br> </property><br> <br> <property name="customSessionFactories"><br> <list><br> <bean class="ldap.LdapUserManagerFactory"><br> <constructor-arg ref="LdapSettingBean" /><br> </bean><br> </list><br> </property><br> <br> </bean><br> <br> <bean id="LdapSettingBean" class="ldap.LdapSetting"><br> <property name="ldapUrl" value="ldap://localhost" /><br> <property name="ldapPort" value="10389" /><br> <property name="securityAuthentication" value="simple" /><br> </bean> <br><br> …<br>
<br>db=postgresql<br>jdbc.driver=org.postgresql.Driver<br>jdbc.url=jdbc:smileytongue:ostgresql://localhost:5432/activiti<br>jdbc.username=postgres<br>jdbc.password=admin<br>