乐趣区

关于工作流:工作流Activiti框架中LDAP组件详细解析实现对工作流目录信息的访问控制

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 可配置的属性:
属性名 形容 类型 默认值
server LDAP 服务器地址 String
port LDAP 运行的端口 int
user 连贯 LDAP 应用的账号用户名 String
password 连贯 LDAP 应用的明码 String
initialContextFactory 连贯 LDAP 应用的 InitialContextFactory 名称 String com.sun.jndi.ldap.LdapCtxFactory
securityAuthentication 连贯 LDAP 时设置的 java.naming.security.authentication 属性值 String simple
customConnectionParameters 能够设置那些没有对应 setter 的连贯参数, 这些属性用来配置连接池, 特定的平安设置等等. 所有提供的参数都会用来创立 LDAP 连贯 Map<String,String>
baseDn 搜寻用户和组基于的 DN(显著名称) String
userBaseDn 搜寻用户基于的 DN(distinguished name). 如果没有提供, 会应用 baseDn String
groupBaseDn 搜寻群组基于的 DN. 如果没有提供, 会应用 baseDn String
searchTimeLimit 搜寻 LDAP 的超时工夫, 单位毫秒 Long 1 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 进行的查问都会应用缓存 long 1 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 的管理员, 用户组也一样
    • 所有不匹配的组都会当做 调配 组, 这样工作就能够进行调配
退出移动版