Activiti集成LDAP简介

  • 企业在LDAP零碎中保留了用户和群组信息,Activiti提供了一种解决方案,通过简略的配置就能够让activit连贯LDAP

    用法

  • 要想在我的项目中集成LDAP,须要在pom.xml中增加activiti-ldap依赖:

    <dependency><groupId>org.activiti</groupId><artifactId>activiti-ldap</artifactId><version>latest.version</version></dependency>

    用例

  • 集成LDAP有两大用例:

    • 通过IdentityService进行认证: 应用Activiti Explorer 通过LDAP登录
    • 取得用户的组: 在查问用户能够看到哪些工作时十分重要,比方任务分配给一个候选组

      配置

  • 集成LDAP是通过向流程引擎配置中的configurators注入 org.activiti.ldap.LDAPConfigurator的实例来实现的
  • 这个类是高度可扩大的: 如果默认的实现不合乎用例的话,能够很容易的重写办法,很多依赖的bean都是可插拔的

    <bean id="processEngineConfiguration" class="...SomeProcessEngineConfigurationClass">      ...      <property name="configurators">        <list>            <bean class="org.activiti.ldap.LDAPConfigurator">              <!-- Server connection params -->              <property name="server" value="ldap://localhost" />              <property name="port" value="33389" />              <property name="user" value="uid=admin, ou=users, o=activiti" />              <property name="password" value="pass" />              <!-- Query params -->              <property name="baseDn" value="o=activiti" />              <property name="queryUserByUserId" value="(&(objectClass=inetOrgPerson)(uid={0}))" />              <property name="queryUserByFullNameLike" value="(&(objectClass=inetOrgPerson)(|({0}=*{1}*)({2}=*{3}*)))" />              <property name="queryGroupsForUser" value="(&(objectClass=groupOfUniqueNames)(uniqueMember={0}))" />              <!-- Attribute config -->              <property name="userIdAttribute" value="uid" />              <property name="userFirstNameAttribute" value="cn" />              <property name="userLastNameAttribute" value="sn" />              <property name="groupIdAttribute" value="cn" />              <property name="groupNameAttribute" value="cn" />            </bean>        </list>      </property>  </bean>'

    属性

  • org.activiti.ldap.LDAPConfigurator可配置的属性:
属性名形容类型默认值
serverLDAP服务器地址String
portLDAP运行的端口int
user连贯LDAP应用的账号用户名String
password连贯LDAP应用的明码String
initialContextFactory连贯LDAP应用的InitialContextFactory名称Stringcom.sun.jndi.ldap.LdapCtxFactory
securityAuthentication连贯LDAP时设置的java.naming.security.authentication属性值Stringsimple
customConnectionParameters能够设置那些没有对应setter的连贯参数,这些属性用来配置连接池,特定的平安设置等等.所有提供的参数都会用来创立LDAP连贯Map<String,String>
baseDn搜寻用户和组基于的DN(显著名称)String
userBaseDn搜寻用户基于的DN(distinguished name).如果没有提供,会应用baseDnString
groupBaseDn搜寻群组基于的DN.如果没有提供,会应用baseDnString
searchTimeLimit搜寻LDAP的超时工夫,单位毫秒Long1 h
queryUserByUserId应用用户Id搜寻用户的查问语句:(&(objectClass=inetOrgPerson)(uid={0})), LDAP中所有蕴含inetOrgPerson类的匹配uid属性的值都会返回.如果只设置一个查问无奈满足特定的LDAP设置,能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能String
queryUserByFullNameLike应用全名搜寻用户的查问语句:(& (objectClass=inetOrgPerson) (({0}={1})({2}={3})) ),LDAP中所有蕴含inetOrgPerson类的 匹配first namelast name的值都会返回.留神{0}会替换为firstNameAttribute,{1}和{3}是搜寻内容. {2}是lastNameAttribute. 如果只设置一个查问无奈满足特定的LDAP设置,能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能String
queryGroupsForUser应用搜寻指定用户的组的查问语句: (&(objectClass=groupOfUniqueNames)(uniqueMember={0})) ,LDAP中所有蕴含groupOfUniqueNames类的提供的DN(匹配用户的DN)是uniqueMember的记录都会返回.{0}会替换为用户Id.如果只设置一个查问无奈满足特定的LDAP设置,能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能String
userIdAttribute匹配用户Id的属性名.这个属性用来在查找用户对象时,关联LDAP对象与Activiti用户对象之间的关系String
userFirstNameAttribute匹配first name的属性名.这个属性用来在查找用户对象时,关联LDAP对象与Activiti用户对象之间的关系String
userLastNameAttribute匹配last name的属性名.这个属性用来在查找用户对象时,关联LDAP对象与Activiti用户对象之间的关系String
groupIdAttribute匹配组Id的属性名.这个属性用来在查找组对象时,关联LDAP对象与Activiti组对象之间的关系String
groupNameAttribute匹配组名的属性名.这个属性用来在查找组对象时,关联LDAP对象与Activiti组对象之间的关系String
groupTypeAttribute匹配组类型的属性名.这个属性用来在查找组对象时,关联LDAP对象与Activiti组对象之间的关系String
  • 高级属性: 心愿批改默认行为或批改组缓存时应用
属性名形容类型默认值
ldapUserManagerFactory设置LDAPUserManagerFactory的自定义实例,如果默认实现不满足需要LDAPUserManagerFactory的实例
ldapGroupManagerFactory设置LDAPGroupManagerFactory的自定义实例,如果默认实现不满足需要LDAPGroupManagerFactory的实例
ldapMemberShipManagerFactory设置LDAPMembershipManagerFactory的自定义实例,如果默认实现不满足需要.不常常应用因为失常状况下LDAP会本人治理关联关系LDAPMembershipManagerFactory的实例
ldapQueryBuilder设置自定义查问结构器,如果默认实现不满足需要.LDAPQueryBuilder实例用在LDAPUserManagerLDAPGroupManager中,执行对LDAP的查问. 默认实现会应用配置的queryGroupsForUserqueryUserById属性org.activiti.ldap.LDAPQueryBuilder的实例
groupCacheSize组缓存的大小.这是一个LRU缓存,用来缓存用户的组,能够防止每次查问用户的组时,都要拜访LDAP.如果值小于0,就不会创立缓存.默认为-1,所以不会进行缓存int-1
groupCacheExpirationTime设置组缓存的过期工夫,单位为毫秒.当获取特定用户的组时,并且组缓存也启用,组会保留到缓存中,并应用这个属性设置的工夫:当组在00:00被获取,过期工夫为30分钟,那么所有在00:30之后进行的查问都不会应用缓存,而是再次去LDAP查问.因而,所以在00:00-00:30进行的查问都会应用缓存long1 h
  • 留神: 在应用流动目录AD,InitialDirContext须要设置为Context.REFERRAL能够通过customConnectionParameters传递

    Explorer集成LDAP

  • LDAP配置增加到activiti-standalone-context.xml
  • activiti-ldap-jar放到WEB-INF/lib目录
  • 删除demoDataGenerator bean, 否则会尝试插入数据,集成LDAP不容许这么做
  • 增加配置到activiti-ui.contextexplorerApp bean:

    <property name="adminGroups"><list>  <value>admin</value></list></property><property name="userGroups">  <list>    <value>user</value>  </list></property>
  • 应用你自定义配置替换其中的值:

    • 须要用到的数据是组的Id,通过groupIdAttribute配置
    • 配置会让admin组下的所有用户都成为Activiti Explorer的管理员,用户组也一样
    • 所有不匹配的组都会当做调配组,这样工作就能够进行调配